2011-12-29 32 views
7

que tienen la consulta:LINQ suma y la nula

var qq = (from c in db.tblArcadeGames 
     where 
      c.IsDeleted == false && 
      c.ParentGameID == 0 && 
      c.Approved == true 
     let aggPlays = c.Plays + db.tblArcadeGames.Where(v => v.ParentGameID == c.ID).Sum(v => (int?)v.Plays) 
     orderby aggPlays descending 
     select new { c, aggPlays }) 
     .Skip(Skip) 
     .Take(Fetch); 

foreach (var g in qq) 
{ 
    HttpContext.Current.Response.Write("{" + g.aggPlays + "}\n"); 
} 

Cuando imprimo aggPlays en el bucle de arriba salen como:

{21} 
{} 
{} 
{} 

El problema parece ser que los Sum() vuelve null si no existen registros No estoy seguro de cómo evitar esto para que c.Plays + null no sea igual a null pero solo c.Plays.

Respuesta

16

Puede corregir esto no volver int?, sino convertir a un int directamente:

.Sum(v => v.Plays ?? 0) 
+0

Gracias Esto funciona! ¿Por qué la suma de un conjunto vacío es nula en linq a sql? Una suma de un conjunto vacío debería ser 0 ¿verdad? –

+1

@TomGullen * "' Suma() 'siempre devuelve 0 para una secuencia vacía en LINQ simple, parece que es más bien una deficiencia de LINQ a SQL, e incluso entonces solo debería ser posible si los valores que suma son nulos (porque de lo contrario, el tipo de devolución de Sum sería simple * 'decimal' *, no *' decimal? '*)." * Desde http://connect.microsoft.com/VisualStudio/feedback/details/360365/linq-sum- method-return-value – Rob

+0

@robjb ninguna de las columnas puede contener nulos, ¿es esto un error en linq a sql? –

1
int response = 
    (from p in data.tbHoraires 
    where p.eid == eid && p.annee == annee && p.obligatoire == true 
    select (int?)p.nbminute ?? 0).Sum(); 
Cuestiones relacionadas