我有以下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,我需要一项成分x和Amt 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查询以促进这一点?希望我的问题很清楚:)
你有2个选择:
Sumnull,则返回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)
注意:第二个查询将枚举两次。