2016-04-10 11 views
1

Merhaba iki farklı alanlara göre sonuçlanmasıLinq/Lambda karmaşık sorgu olsun bilgilere aşağıdaki ettiğini Masayı var

id StoretId itemId Mon Tue Wed 
1  1   20  33 10  5 
2  1   21  1  0  3 
3  1   20  3  2  1 
4  2   21  2  1  1 
5  2   20  1  1 1 
6  2   21  4  4 5 

Ne yapmaya çalışıyorum olsun her gün için her StoreID ve öğeleri toplam tarafından sonuçlanması olduğunu itemId tarafından, bu şekilde görünüyor.

StoreId 1 
    itemId  Mon Tue Wed 
     20  36 12 6 
     21  1  0 3 
StoreId 2 
    itemId Mon Tue Wed 
     20  1 1 1 
     21  6 5 6 

mağaza kullanıcı girişi listesi yani

storelist= [{storeId :1}, {storeId: 2}, {storeId: 3}] 



var results= DbContext.Set<stores>() 
      .Where(x=> storelist.Contains(x.storeId) 
      .Select(y=> new 
         { 
          storeId=y.storeId, 
          itemsdetails= DbContext.Set<maintable>() 
             .Select(m=> new 
               { 
               itemId=m.itemId.Distinct(), 
               Mon=m.Mon.Sum(), 
               Tue=m.Tue.Sum(), 
               Wed=m.Wed.Sum() 
               } 
         } 

Sorgu kavramsal iyi görünüyor için sonuç almak için eğer şimdiye kadar yapmış ama kırar ve sonucu vermez. Lütfen istediğiniz çıktıyı elde etmek için nasıl düzelteceğimi bildirin. Teşekkür

+1

ben yerine Farklı bir GroupBy kullanmam gerekiyor. Sorguyu grup ile yeniden yazmayı deneyin. Umarım probleminizi çözecektir. – bluetoothfx

cevap

0

hem StoreID ve ItemID ve sonuç olarak diğer değerlerin seçkin toplamı göre gruplandırılmış edilmelidir grubun toplamına sütunları seçin ardından mağazanın göre gruplandırmak GroupBy kullanıp olmalıdır:

var result = listedeki öğeden

     group item by new 

        { 

          item.StoreID, 

          item.ItemID 

         } into groupList 

         select new 

         { 

          StoreID = groupList.Key.StoreID, 

          ItemID = groupList.Key.ItemID, 

          mon = groupList.Sum(i => i.mon), 

          tue = groupList.Sum(i => i.tue), 

          wed = groupList.Sum(i => i.wed) 

        }; 
1

Sen

var result = list.GroupBy(o => o.StoreId) 
    .Select((o, i) => new 
    { 
     ID = o.ElementAt(i).ID, 
     StoreId = o.Key, 
     Mon = o.Sum(x => x.Mon), 
     Tue = o.Sum(x => x.Tue), 
     Wed = o.Sum(x => x.Wed), 
    }).ToList();