2010-06-04 6 views
3

Я видел несколько примеров на этом, но их повторное создание в этом примере, похоже, не работает. Кто-нибудь есть какие-либо идеи, что не так со следующим кодом ....Проблема с 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 }; 

Большое спасибо заранее

Keith

ответ

1

Проблема заключается в том, что нет ни одного продукта в категории «Экзотические» , поэтому при попытке прочитать имя продукта (в последней строке кода) появляется NullReferenceException.

Для кода не врезаться вы можете добавить пустой чек:

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]" 
     };