2011-05-28 11 views
6

estoy dinámicamente la construcción de una consulta que empiecen con este:secuencia agregada LINQ no contiene elementos

var items = db.Items; 

...

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

El problema es que algunos elementos no tienen ningún dato en la tabla de calificaciones todavía, así que creo que está tratando de promediar los datos que no existen. Usar DefaultOrEmpty() al final no parece tener ningún efecto. ¿Alguna sugerencia sobre cómo arreglaría esto?

Respuesta

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

Probar eso.

+0

Yo, literalmente, acaba de intentar que antes de comprobar aquí. Aceptaré tu respuesta en 5 minutos cuando me lo permita. –

+0

Gracias y bien hecho. –

+2

¡Nick y AD.Net son la misma persona!/ReputationConspiracyTheory – vbullinger

13

Si está utilizando este formulario:

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

entonces la solución es:

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

encontrado here

Cuestiones relacionadas