c# - 如何使用 LINQ 对 DISTINCT 行的值求和

标签 c# linq

数据表如下:

Item CartonID Quantity
A    0001     1000
A    0002     500
A    0003     250
A    0002     500
B    0002     500
B    0003     250

我的输出应该是这样的:

ItemNo CartonID        TotalCarton TotalQuantity
A      0001,0002,0003  3           2250
B      0002,0003       2           750

但我的结果如下:

ItemNo  CartonID            TotalCarton  TotalQuantity
    A   0001, 0002, 0003    3              2,250
    B   0002, 0003          2                750

我的代码如下:

var items = ( from item in dtTest.AsEnumerable()
              group item by new
              {
                  Item_No=item.Field<string>("Item")
              }
              into g
              select new
              {
                  g.Key.Item_No,
                  TotalCarton = (from p in dtTest.AsEnumerable()
                                 where p.Field<string>("Item") == g.Key.Item_No
                                 select p.Field<string>("CartonID")).Distinct().ToArray().Count(),
                  Total_Quantity =g.Sum((p=>p.Field<decimal>("Quantity"))).ToString("###,###,###,###"),
                  CartonID = (from p in dtTest.AsEnumerable()
                              where p.Field<string>("Item") == g.Key.Item_No
                              select p.Field<string>("CartonID")).Distinct().ToArray().Aggregate
                              ((p1, p2) => p1 + ", " + p2)
                 }).ToList();

任何人都可以告诉我如何用不同的纸箱 ID 计算总数。提前致谢。

最佳答案

您应该 GroupBy CartonID,然后对组元素求和:

像这样

dtTest.GroupBy(x => x.CartonId)
      .ToDictionary(y => y.Key, y => y.Sum(z => z.Quantity);

这将返回一个字典,其中包含每个 CartonID 的总数量。我希望我理解正确,这就是您想要的。


根据您所说的应该检索的输出,我将查询调整为:

dtTest.GroupBy(x => x.ItemNo)
      .Select(itemGroup => new { 
              itemGroup.Key,
              itemGroup.Distinct(item => item.CartonID), 
              itemGroup.Distinct(item => item.CartonID).Count(),
              itemGroup.Sum(item => item.Quantity)
});

关于c# - 如何使用 LINQ 对 DISTINCT 行的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14645770/

相关文章:

c# - Fiddler 测试 API Post 传递 [Frombody] 类

c# - 如何在 Visual Studio 2015 RC 中启用 Intellitest?

c# - 将不同的 Bundle Virtual Path 联合成一个

c# - 如何删除电话号码的格式?

c# - LINQ 查询中的 "=>"标志是什么?

C# ListView SelectAll 选择颜色

c# - Linq & boolean 函数

mysql - 使用一个查询的可查询列表结果作为另一个查询的参数?

c# - 使用 LINQ 删除列表中的项目

c# - 如何使用 C# 在 LAN 中查找可用的 IP 地址