2010-06-04 6 views
3

J'ai vu un certain nombre d'exemples à ce sujet mais les reproduire dans cet exemple ne semble pas fonctionner. Est-ce que quelqu'un a des idées ce qui ne va pas avec le code suivant ....Problème avec Linq Left Join

var products = new[] 
    { 
     new {ProductName ="Soda", Category = "Beverages"}, 
     new {ProductName ="Tuna", Category = "SeaFood"}, 
     new {ProductName ="Jam", Category = "Condiment"} 
    }; 

    var categories = new[] 
    { 
     new {Category = "Beverages", Description="Slurp"}, 
     new {Category = "SeaFood" , Description="Nosh"}, 
     new {Category = "Exotic" , Description="Spicy!"}, 
    }; 

    var q = from c in categories 
       join p in products on c.Category equals p.Category into tmp 
       from prd in tmp.DefaultIfEmpty() 
       select new { Category = c.Category, 
           Description = c.Description,   
           ProductName = prd.ProductName }; 

Merci d'avance

Keith

Répondre

1

Le problème est qu'il n'y a pas de produit dans la catégorie « exotique » , donc il y a un NullReferenceException levé en essayant de lire le nom du produit (dans la dernière ligne de code).

Pour le code de ne pas vous planter pouvez ajouter un chèque null:

var q = from c in categories 
     join p in products on c.Category equals p.Category into tmp 
     from prd in tmp.DefaultIfEmpty() 
     select new 
     { 
      Category = c.Category, 
      Description = c.Description, 
      ProductName = prd != null ? prd.ProductName : "[null]" 
     };