2011-03-02 30 views
2

這是我目前的LINQ查詢:如何在EF中分組數據兩次?

  var list_1 = from z in _uow.Events.FindAll() 
        group z by new 
            { 
             z.GroupOfEvents.Customer, 
             z.GroupOfEvents.GroupOfGroupOfEvents.Data.Year, 
             z.GroupOfEvents.GroupOfGroupOfEvents.Data.Month, 
             z.GroupOfEvents.GroupOfGroupOfEvents.Data.Day 
            } 
         into zz 
         select new 
            { 
             zz.Key.Customer.Id, 
             zz.Key.Year, 
             zz.Key.Month, 
             zz.Key.Day, 
             Amount = zz.Sum(a => a.Amount) 
            }; 

我想獲得的客戶ID分組數據,然後通過天(年 - 月 - 日)。所以我想每個客戶每天訪問特定的「金額」。任何想法如何做到這一點?

+0

其中密鑰是CustomerId和值另一個字典密鑰是日期和價值字典金額會很好,但如何獲得這種結構? – Inez 2011-03-02 05:22:35

回答

1

到目前爲止,我來了這個,但我不知道這是最好的方式嗎?

  var list_a = 
      from klient in _uow.Klient.FindAll() 
      select 
       new 
        { 
         Klient = klient, 
         Days = 
       from grupaZdarzen in klient.GrupaZdarzen 
       group grupaZdarzen by new 
              { 
               grupaZdarzen.ZestawGrupZdarzen.Data.Year, 
               grupaZdarzen.ZestawGrupZdarzen.Data.Month, 
               grupaZdarzen.ZestawGrupZdarzen.Data.Day 
              } 
       into grupyZdarzenByDay 
       select new 
          { 
           Data = grupyZdarzenByDay.Key, 
           Total = 
        (from grupaZdarzenByDay in grupyZdarzenByDay 
        from zdarzeniaByGrupa in grupaZdarzenByDay.Zdarzenie 
        select zdarzeniaByGrupa.Ilosc).Sum() 
          } 
        }; 

     var list_b = list_a.ToDictionary(a => a.Klient.Id, 
             a => 
             a.Days.ToDictionary(
              b => b.Data.Day + "/" + b.Data.Month + "/" + b.Data.Year, b => b.Total)); 
+0

這個工作適合你嗎?我試圖做一個類似的查詢,如果你從那以後做了更多的事情,會感興趣。 – 2011-04-12 18:46:35

+0

這對我很好。 – Inez 2011-06-02 07:40:30