2012-09-13 9 views
18

Ho la seguente query:metodo di estensione LINQ Max dà un errore su collezioni vuote

var maxNumber = dbContext.Where(a => a.Id == 9).Max(a => a.Sample_Num); 

Se non c'è Id di 9, ottengo un errore. Mi piace se non c'è Id 9.

ho cercato di default il risultato di 0:

var maxNumber = dbContext.Where(a => a.Id == 9).Max(a => a.Sample_Num) ?? 0; 

così come altre varianti, ma non sono riuscito a farlo funzionare

+0

Non riesco a vedere nessun GroupBy nel codice sopra ... :) –

risposta

62

Si potrebbe utilizzare Any per verificare se c'è un elemento corrispondente:

int maxNumber = 0; 
var id9 = dbContext.Where(a => a.Id == 9); 
if(id9.Any()) 
{ 
    maxNumber = id9.Max(a => a.Sample_Num); 
} 

oppure si potrebbe usare DefaultIfEmpty(defaultValue):

012.
+24

+1 per l'uso intelligente di "DefaultIfEmpty' –

+3

concordato. Detesto usare 'Any()' perché forza l'enumerazione una seconda volta. – Paul

+0

^1 Tim non è solo intelligente ma bello. –

Problemi correlati