2012-09-13 12 views
18

Tengo la siguiente consulta:método de LINQ Max extensión da un error en colecciones vacías

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

Si no hay una identificación de 9, me sale un error. Me gusta el resultado por defecto a 0 si no hay una identificación de 9.

Traté:

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

así como otras variaciones, pero no era capaz de conseguir que funcione

+0

No puedo ver ningún GroupBy en el código anterior ... :) –

Respuesta

62

Usted podría Any utilizar para comprobar si hay un elemento coincidente:

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

o puede utilizar DefaultIfEmpty(defaultValue):

int maxNumber = dbContext 
    .Where(a => a.Id == 9) 
    .Select(a => a.Sample_Num) 
    .DefaultIfEmpty(0) 
    .Max(); 
+24

+1 para el uso inteligente de 'DefaultIfEmpty' –

+3

De acuerdo. Odio usar 'Any()' porque obliga a la enumeración por segunda vez. – Paul

+0

^1 Tim no solo es inteligente sino guapo. –

Cuestiones relacionadas