c#/Linq 总和在哪里

标签 c# asp.net linq

我有一个 NCR 表,其中包含以下格式的数据:

ID | Date     | Item   | Type | Qty
1  | 01/01/13 | Apple  | A    | 1 
2  | 01/01/13 | Apple  | B    | 1 
3  | 01/01/13 | Orange | C    | 1 
4  | 01/01/13 | Orange | A    | 2 
6  | 01/01/13 | Orange | C    | 1 

我想生成一个 linq 查询,为我提供给定日期的类型和总和的摘要,如下所示:

Item   | A | B | C
Apple  | 1 | 1 | 0 
Orange | 2 | 0 | 2 

到目前为止我有这个:

var q = data.GroupBy(l => l.Item)
             .Select(g => new {
                                    Item = g.Key,
                                    Total = g.Sum(c => c.Qty),
                                    A = g.Sum(c => c.Type == "A"),
                                    B = g.Sum(c => c.Type == "B"),
                                    C = g.Sum(c => c.Type == "C")
});

但是我似乎无法为 g.Sum lambda 语句提供标准。如果我使用 Count(这是错误的数据),我可以给出标准,但为什么 Sum 缺少这个?除了创建可用数据的汇总表之外,我还有什么替代方法?

最佳答案

提供给 Sum 的委托(delegate)不是谓词;这是一个选择器。

您是否尝试对 Qty 属性求和?如果是这样,我怀疑您想要:

A = g.Where(c => c.Type == "A").Sum(c => c.Qty),
B = g.Where(c => c.Type == "B").Sum(c => c.Qty),
C = g.Where(c => c.Type == "C").Sum(c => c.Qty)

(当然,您也可以按类型分组。)

关于c#/Linq 总和在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14561312/

相关文章:

c# - HttpClient PutAsync 使用 RestAPI 更新字段

.net - 如何更改表达式中参数的类型?

c# - 流利的断言 : string does not contain a definition for ShouldBeEquivalentTo

c# - 为什么.NET Native 以相反的顺序编译循环?

c# - 如何测试用 ASP.Net 编写的网站是否还活着?

c# - 在使用 C# 解码 Base64 字符串之前是否删除数据 :image/jpeg;base64, ?

c# - Visual Studio-仅当所有表单均已关闭时才结束调试器

c# - 如何让 JsonNode.ToJsonString(...) 按字母顺序生成属性?

asp.net - 无法启用/工作的 Web API 属性路由

c# - 使用按日期/月份分组的日期期间操作列表中的数据