2010-06-04 78 views
3

我已經看到了很多這方面的例子,但在這個例子中重新產生它們似乎並不奏效。沒有人有任何的想法有什麼不對下面的代碼....Linq Left加入問題

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

許多在此先感謝

基思

回答

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