C# 林克元';t用浮点数求一个组的和?财产
我有以下LINQ表达式: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的成
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
});