2012-01-24 13 views
5

Mam następujące wyrażenie LINQ:LINQ nie sumuje grupy z floatem? Nieruchomość

pantry = (from p in items 
      group p by p.IngredientId into g 
      select new PantryItem() { IngredientId = g.Key, Amt = g.Sum(p => p.Amt) }); 

Zasadniczo próbuję usunąć duplikaty z tablicy przez zsumowanie ich łącznej kwoty. Więc jeśli mam 2 pozycje IngredientId x, jeden z Amt 5 a drugi z Amt 10, chcę pojedynczy element Składnik x z Amt 15. Łatwo wystarczy?

Teraz, aby całkowicie zepsuć wszystko, Amt jest w rzeczywistości float?, a nie float. Jednakże, gdy Sum grupa z wszystkich null kwoty, otrzymam 0.0 zamiast null.

Oto, czego chcę:

x - null 
x - null 
y - 5 
y - 10 
z - 10 
z - null 

powinien przekształcić się:

x - null 
y - 15 
z - 10 

Ale zamiast uzyskać:

x - 0.0 
y - 15 
z - 10 

Czy istnieje sposób, aby ponownie pracować mojej kwerendy LINQ ułatwić to? Mam nadzieję, że moje pytanie jest wystarczająco jasne :)

+0

Cóż to jest 'Amt' w' PantryItem' typu Nullable? Myślę, że nie jest to prawdopodobnie – V4Vendetta

+0

'Amt' jest' float? ' –

Odpowiedz

3

Masz 2 możliwości:

  1. Napisz własną implementację Sum
  2. sprawdzić, czy wszystkie wartości są null, a następnie powrót null, w przeciwnym razie zwraca sumę, na przykład:

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 zapytanie zostanie wyliczone dwukrotnie.

+0

Czy istnieje sposób to zrobić w jednej instrukcji LINQ, czy powinienem zbudować tablicę z zerowymi grupami, a następnie zbudować tablicę z grupami nie pustymi, a następnie dołączyć je razem? –

+0

Och, fajnie (zignoruj ​​komentarz, napisałem to, zanim zaktualizowałeś swoją odpowiedź) - spróbuję tego! –

+0

Działa świetnie, wielkie dzięki! –

Powiązane problemy