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查询来促进这一点?希望我的问题足够清楚:)
您有两个选择:
- 编写自己的
Sum
实现 - 检查所有值是否为
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查询将枚举两次。