用LET求一组,以求数量的总和

本文关键字:一组 LET | 更新日期: 2023-09-27 18:17:03

我有一个看起来像这样的数据集:

Name Type Quantity
 A    1    2
 A    2    3
 B    1    3

由类Items定义,包含三个字段(string Name, int Type, double Quantity)。

存储在List<</p>

我需要做的是获得特定NAME的QUANTITY的SUM,但这个逻辑位于更大的LINQ查询中,所以我试图找到一种方法来使用LET语句。

知道我正在寻找一个(Name = TargetName)的总数量,我试图做这样的事情:

let items = Summary.Where(y => y.Name == TargetName).GroupBy.(z => z.Name)

,现在我可以使用项来得到我的总和,如下所示:

TotalQuantity = items.Sum(x => x.Quantity)

但这不起作用,得到以下错误:

错误2 'System.Linq。igrouing '不包含'Quantity'的定义,也不包含'Quantity'的扩展方法

这也是当我做x时的情况,在智能意义上没有数量选项(它给了我选项,好像这是一个列表)。

任何想法?我认为这是一个新错误(我是LINQ的新手)。谢谢你,

用LET求一组,以求数量的总和

如果只需要对特定的名称求和,只需调用:

TotalQuantity =  Summary.Where(y => y.Name == TargetName)
                        .Sum(x => x.Quantity);

,在这种情况下不需要使用GroupBy。但是,如果您希望经常以不同的名称访问SUM,则可以考虑先使用GroupBy,然后使用ToDictionary来提高性能:

var sumDic = Summary.GroupBy(z => z.Name)
                    .ToDictionary(g => g.Key, 
                                  g => g.Sum(x => x.Quantity));

所以,如果你想获得任何Name的数量,只需使用sumDic:

var result = sumDic[TargetName];