2012-01-24 4 views
5

は、私は、次の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) }); 

を基本的に、私は彼らの合計金額を合計して、配列から重複を削除しようとしています。私はAMTの10AMTの5及びその他でIngredientId X、1の2つのアイテムを持っているのであれば、私は成分の単一の項目がAMTの15をxは欲しいです。簡単には十分ですか?

すべてを完全に破るために、Amtは実際にはfloat?であり、floatではありません。しかし、私がnullの額を持つグループSumを受け取ったとき、nullの代わりに0.0が得られます。ここで

は、私が欲しいものです:

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クエリを再動作させる方法はありますこれを容易にするために?うまくいけば、私の質問は十分に明確である:)

+0

Nullable型の「PantryItem」に「Amt」がありますか?私はそれがおそらく – V4Vendetta

+0

'Amt'が' float? 'だと思うでしょう –

答えて

3

あなたは2つの選択肢があります。

  1. すべての値が、その後、nullしている場合など、それ以外の合計を返し、nullを返すSum
  2. チェックの独自の実装を書く:

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

NO TE:2 ndクエリは2回列挙されます。

+0

これをLINQステートメントで行う方法はありますか、またはヌルグループの配列を作成してから、ヌルグループの配列を作成してから一緒に追加しますか? –

+0

ああ、クール(コメントを無視して、私はあなたの答えを更新する前にそれを書いた) - 私はこれを試してみよう! –

+0

素晴らしい作品、ありがとうございました! –

関連する問題