Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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# 林克元';t用浮点数求一个组的和?财产_C#_.net_Linq - Fatal编程技术网

C# 林克元';t用浮点数求一个组的和?财产

C# 林克元';t用浮点数求一个组的和?财产,c#,.net,linq,C#,.net,Linq,我有以下LINQ表达式: pantry = (from p in items group p by p.IngredientId into g select new PantryItem() { IngredientId = g.Key, Amt = g.Sum(p => p.Amt) }); 基本上,我试图通过求和它们的总量来从数组中删除重复项。因此,如果我有两项IngCreditID x,一项金额为5,另一项金额为10,我想要一项金额为15的成

我有以下LINQ表达式:

pantry = (from p in items
          group p by p.IngredientId into g
          select new PantryItem() { IngredientId = g.Key, Amt = g.Sum(p => p.Amt) });
基本上,我试图通过求和它们的总量来从数组中删除重复项。因此,如果我有两项IngCreditID x,一项金额为5,另一项金额为10,我想要一项金额为15的成分x。很简单,对吧

现在,为了彻底打破这一切,
Amt
实际上是一个
float?
,而不是
float
。但是,当我对一个包含所有
null
金额的组进行
Sum
时,我得到的是
0.0
,而不是
null

以下是我想要的:

x - null
x - null
y - 5
y - 10
z - 10
z - null
应转换为:

x - null
y - 15
z - 10
但我得到的却是:

x - 0.0
y - 15
z - 10
有没有办法重新处理我的LINQ查询来促进这一点?希望我的问题足够清楚:)

你有两个选择:

  • 编写自己的
    Sum
  • 检查所有值是否为
    null
    ,然后返回
    null
    ,否则返回总和,例如:


  • 注意:第二次查询将枚举两次。

    Well在
    PantryItem
    中是否为可空类型的
    Amt
    ?我认为在一个LINQ语句中可能并没有实现这一点的方法,或者我应该构建一个空组数组,然后构建一个非空组数组,然后将它们附加在一起吗?哦,酷(忽略注释,我在更新答案之前写的)——我会试试这个!
    pantry = (from p in items
              group p by p.IngredientId into g
              select new PantryItem() 
              { 
                  IngredientId = g.Key, 
                  Amt = g.Any(p => p.Amt.HasValue) ? g.Sum(p => p.Amt) : null 
              });