LINQ不会用浮点数组合一个组?属性

Mik*_*sen 5 .net c# 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) });
Run Code Online (Sandbox Code Playgroud)

基本上,我试图通过总计它们的总量来从数组中删除重复项.因此,如果我有2项IngredientId x,一项使用Amt 5,另一项使用Amt 10,我需要一项成分xAmt 15的单项.够容易吧?

现在,彻底打破一切,Amt实际上是一个float?,而不是一个float.但是,当我Sum是一个包含所有null金额的团体时,我得到的0.0不是null.

这就是我想要的:

x - null
x - null
y - 5
y - 10
z - 10
z - null
Run Code Online (Sandbox Code Playgroud)

应转换为:

x - null
y - 15
z - 10
Run Code Online (Sandbox Code Playgroud)

但相反,我得到:

x - 0.0
y - 15
z - 10
Run Code Online (Sandbox Code Playgroud)

有没有办法重新处理我的LINQ查询以促进这一点?希望我的问题很清楚:)

Kir*_*huk 3

你有2个选择:

  1. 编写您自己的实现Sum
  2. 检查所有值是否为null,则返回null,否则返回 sum,例如:

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

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