Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#/Linq sum在哪里_C#_Asp.net_Linq - Fatal编程技术网

c#/Linq sum在哪里

c#/Linq sum在哪里,c#,asp.net,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查询,它为

我有一个表格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
的委托不是谓词;这是一个选择器

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

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)

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

如何使用此方法处理空值?例如,如果没有B,我会得到一个“物化值为null”error@GordonCopestake:您不应该-
Sum
应该返回0。你确定你没有得到一个
Qty
属性为0的值吗?@gordoncopestage如果Qty是可为空的字段,那么你可以这样做:求和(c=>c.Qty?0)或求和(c=>(c.Qty==null?0:c.Qty))