使用linq通过选择新阵列进行分组

伊斯玛·哈罗(Isma haro)

我需要有关linq查询的帮助

我有一个带有名称,库存和其他字段的产品表。可以有“重复的”产品名称,但有“不同的库存”。

我需要三件事:

  1. 选择所有产品并按名称分组
  2. 在SELECT中,对具有相同名称的产品的库存字段求和
  3. 应该在“数组”上检索Select,因为我将通过JSON发送它

因此,例如,如果我有一支带有库存1的产品笔。

然后是另一个具有相同名称“ pen”但具有库存3的产品

然后,我的选择只给了我一行“名称”为“ pen”,库存为“ 4”的行

我曾经有这样的查询:

        var result = (from c in Products
                      where c.Inventory != 0
                      select new[] {
                         Convert.ToString(i++),
                         c.Name,
                         c.Family,
                         c.Inventory});

它有效,但是现在我需要添加“分组依据”产品名称,并对每个具有相同名称的产品的库存求和,但是我不知道如何

八叶球菌

如果我很了解您的问题,那么您正在寻找以下内容:

  var result = (from c in Products
                where c.Inventory != 0
                group c by new{c.Name,c.Family} into g
                select new {g.Key.Name, g.Key.Family, Inventory=g.Sum(e=>e.Inventory)}).ToArray();

您可以group在此msdn页面中找到有关如何使用子句的更多信息

更新

如果要在投影中添加另一个字段,而又不介意具有哪个值(如注释中所述),则可以使用First扩展方法:

new {g.Key.Name, 
     g.Key.Family,
     Country=g.First().Country, 
     Inventory=g.Sum(e=>e.Inventory)}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章