2011-05-28 11 views
6

Mam dynamicznie budowania zapytanie zaczynające się następująco:LINQ łączna sekwencja zawiera żadnych elementów

var items = db.Items; 

...

case "4": 
items = items.OrderBy(x => x.Ratings.Average(t => t.score)).ThenBy(x => x.title); 

Problemem jest to, że niektóre elementy nie mają żadnych danych w tabeli ocen, więc uważam, że stara się uśrednić dane, które nie istnieją. Korzystanie z końcówki nie wydaje się mieć żadnego efektu. Jakieś sugestie, jak to naprawić?

Odpowiedz

7
items = items.Where(x=>x.Ratings.Any()). 
      OrderBy(x => x.Ratings.Average(t => t.score)). 
      ThenBy(x => x.title); 

Spróbuj tego.

+0

ja dosłownie próbował że przed sprawdzeniem tutaj. Przyjmuję twoją odpowiedź w 5min, kiedy pozwala mi to zrobić. –

+0

Dzięki i dobrze zrobione. –

+2

Nick i AD.Net to ta sama osoba!/ReputationConspiracyTheory – vbullinger

13

Jeśli używasz tego formularza:

var effectiveFloor = 
    policies 
    .Where(p => p.PricingStrategy == PricingStrategy.EstablishFloor) 
    .Max(p => p.Amount); 

Wtedy rozwiązaniem jest:

var effectiveFloor = 
    policies 
    .Where(p => p.PricingStrategy == PricingStrategy.EstablishFloor) 
    .DefaultIfEmpty() 
    .Max(p => p==null ? 0 : p.Amount); 

Znaleziony here

Powiązane problemy