2010-11-04 8 views
5

I'm stumped, come posso risolvere questo problema? La tabella ProductAvailability nella mia query non ha un record per ogni prodotto trovato e genera il seguente errore ogni volta che lo eseguo.LINQ, Left Join, throwing exception ... non riuscito perché il valore materializzato è nullo

Il valore di cast per il tipo 'DateTime' non è riuscito perché il valore materializzato è nullo. Il parametro generico del tipo di risultato o la query devono utilizzare un tipo nullable.

Come posso risolvere questo errore? Ho provato a trasmettere paj.DateAvailable a (DateTime?) E anche a verificare la presenza di null, ma ciò non sembra risolvere il problema. Hmmm?

Ecco la mia richiesta. Qualche idea?

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 alle entità? Inoltre, ps? I dettagli sono importanti! –

risposta

1

Si può provare a dichiarare esplicitamente un tipo per il risultato.

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} 

Poiché le cose sono belle ed esplicite, questo dovrebbe avere la digitazione giusta. Tuttavia, si potrebbe pensare che trasmettere paj.DateAvailable sia sufficiente, quindi potrebbe esserci qualcosa di più nella tua situazione.

+0

Grazie per questa soluzione! – Kwex