LINQ赢得';不要用浮点数求一组的和?所有物

本文关键字:一组 所有物 赢得 浮点数 LINQ | 更新日期: 2023-09-27 18:21:25

我有以下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) });

基本上,我试图通过求和它们的总量来从数组中删除重复项。因此,如果我有两个IngredientId x的项目,一个Amt 5,另一个Amt 10。我想要一个Ingredient xAm 15项目。很简单吧?

现在,为了彻底打破一切,Amt实际上是float?,而不是float。然而,当我Sum是一个具有所有null量的组时,我得到的是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查询来促进这一点?希望我的问题足够清楚:)

LINQ赢得';不要用浮点数求一组的和?所有物

您有两个选择:

  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 
          });

注意:2nd查询将枚举两次。