使用LET获取组以获得数量的总和(SUM)?

时间:2013-06-06 03:17:01

标签: c# linq

我有一个如下所示的数据集:

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

由具有三个字段的类Items定义(字符串Name,int Type,double Quantity)。

这存储在List<项目>叫做摘要。

我需要做的是为特定的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.IGrouping'不包含'Quantity'的定义,也没有扩展方法'Quantity'

当我做x时也是如此。在知识产权中没有数量选项(它给了我选项,好像这是一个列表)。

有什么想法吗? 我认为这是一个新的错误(我是LINQ的新手)。 谢谢,

1 个答案:

答案 0 :(得分:2)

如果您只需要为特定名称求和,请致电:

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];