2010-11-04 19 views
5

Estoy perplejo, ¿cómo puedo arreglar esto? La tabla ProductAvailability en mi consulta no tiene un registro para cada producto encontrado y arroja el siguiente error cada vez que lo ejecuto.LINQ, Left Join, throwing exception ... failed porque el valor materializado es nulo

La conversión al tipo de valor 'DateTime' ha fallado porque el valor materializado es nulo. O el parámetro genérico del tipo de resultado o la consulta debe usar un tipo anulable.

¿Cómo puedo corregir este error? Intenté emitir paj.DateAvailable a (DateTime?) Y también verificando null, pero eso no parece solucionar el problema. Hmmm?

Aquí está mi consulta. ¿Algunas ideas?

var query = (from p in entities.Products 
      join pa in entities.ProductAvailabilities on p.ProductId equals pa.ProductId into joinProductAvailabilities 
      from paj in joinProductAvailabilities.DefaultIfEmpty() 
      where ps.IsActive 
      select new { ProductId = p.ProductId, DateAvailable = paj.DateAvailable }).Distinct(); 
+0

Linq To Entities? Además, ps? Los detalles son importantes! –

Respuesta

1

Usted podría tratar explícitamente declarar un tipo para el resultado.

public class MyProductQueryResult 
{ 
    public int ProductId {get;set;} 
    public DateTime? DateAvailable {get;set;} 
} 


from p in entities.Products 
from paj in p.ProductAvailabilities.DefaultIfEmpty() 
select new MyProductQueryResult() 
    {ProductId = p.ProductId, DateAvailable = paj.DateAvailable} 

Puesto que las cosas están muy bien y explícita, esto debe obtener el derecho a escribir. Sin embargo, uno pensaría que lanzar paj.DateAvailable sería suficiente, por lo que podría haber algo más en su situación.

+0

¡Gracias por esta solución! – Kwex