2010-11-04 2 views
5

Je suis perplexe, comment puis-je résoudre ce problème? La table ProductAvailability dans ma requête n'a pas d'enregistrement pour chaque produit trouvé et renvoie l'erreur suivante chaque fois que je l'exécute.LINQ, Left Join, exception de lancement ... a échoué car la valeur matérialisée est nulle

La conversion en type de valeur 'DateTime' a échoué car la valeur matérialisée est null. Le paramètre générique du type de résultat ou la requête doit utiliser un type Nullable.

Comment réparer cette erreur? J'ai essayé de lancer paj.DateAvailable à (DateTime?) Et aussi en vérifiant null mais cela ne semble pas résoudre le problème. Hmmm?

Voici ma requête. Des idées?

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 aux entités? Aussi, ps? Les détails sont importants! –

Répondre

1

Vous pouvez essayer de déclarer explicitement un type pour le résultat.

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} 

Puisque les choses sont gentilles et explicites, cela devrait être correct. Cependant, on pourrait penser que lancer paj.DateAvailable suffirait, donc il pourrait y avoir quelque chose de plus à votre situation.

+0

Merci pour cette solution! – Kwex