c#/ Linq总和在哪里

Gor*_*ake 20 c# linq asp.net

我有一个表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 
Run Code Online (Sandbox Code Playgroud)

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

Item   | A | B | C
Apple  | 1 | 1 | 0 
Orange | 2 | 0 | 2 
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

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")
});
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 30

提供给的代表Sum不是谓词; 这是一个选择器.

你想把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)
Run Code Online (Sandbox Code Playgroud)

(或者你也可以按类型分组.)

  • @GordonCopestake如果qty是可以为空的字段,那么你可以做这样的Sum(c => c.Qty?0)或Sum(c =>(c.Qty == null?0:c.Qty)) (2认同)