0

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

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

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

这存储在名为 Summary 的 List<Items> 中。

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

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

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

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

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

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

错误 2“System.Linq.IGrouping”不包含“数量”的定义,也没有扩展方法“数量”

当我做 x 时也是如此。intelisense 中没有 Quantity 选项(它给了我选项,好像这是一个列表)。

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

4

1 回答 1

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

所以,如果你想得到 any 的数量Name,只需使用sumDic

var result = sumDic[TargetName];
于 2013-06-06T03:22:28.507 回答