2013-12-20 2 views
1

У меня есть два спискаLINQ - Left присоединиться и Группа по и Sum

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

Вы могли бы перевести с помощью лямбда? – Willy

Смежные вопросы