我有一个如下所示的数据集:
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的新手)。 谢谢,
答案 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];