2013-12-20 42 views
1

我有兩個列表LINQ - 左加入,集團通過和點心

var stores = new[] 
{ 
    new { Code = 1, Name = "Store 1" }, 
    new { Code = 2, Name = "Store 2" }  
}; 

var orders = new[] 
{ 
    new { Code = 1, StoreCode = 1, TotalValue = 14.12 }, 
    new { Code = 2, StoreCode = 1, TotalValue = 24.12 } 
}; 

輸出

STORENAME =存儲1 | TotalValue = 38.24

StoreName = Store 2 | TotalValue = 0

我該如何將它轉化爲LINQ to SQL?

var lj = (from s in stores 
      join o in orders on s.Code equals o.StoreCode into joined 
      from j in joined.DefaultIfEmpty() 
      group s by new 
      { 
       StoreCode = s.Code, 
       StoreName = s.Name 
      } 
       into grp 
       select new 
       { 
        StoreName = grp.Key.StoreName, 
        TotalValue = ??? 
       }).ToList(); 

回答

0

當您進行組加入時,所有與商店相關的訂單都將在組中,並且您將有權訪問商店對象。所以,簡單地使用s.Name拿到商店的名稱,g.Sum()計算總訂單:

var lj = (from s in db.stores 
      join o in db.orders on s.Code equals o.StoreCode into g 
      select new { 
      StoreCode = s.Name, 
      TotalValue = g.Sum(x => x.TotalValue) 
      }).ToList(); 

注 - 從你的樣品,它看起來像你不要被商店名稱和代碼需要組,因爲代碼看起來就像主鍵一樣,它不太可能會有多個商​​店具有相同的主鍵但名稱不同。

+1

它的工作,謝謝你! – user3122316

+0

你可以使用lambda翻譯嗎? – Willy