2012-11-13 123 views
0

我想根據是否包含字符串「baby」來篩選查詢結果。根據條件篩選查詢

IEnumerable<ICD.ViewModels.HomeSearchViewModel> query = 
       ICDUnitOfWork.AlphaGroups.Find().GroupJoin(ICDUnitOfWork.Alphas.Find(), 
                  a => a.AlphaGroupID, 
                  g => g.AlphaGroupID, 
                  (alphaGroups, alphas) => 
                  new ICD.ViewModels. 
                   HomeSearchViewModel 
                   { 
                    AlphaGroups = 
                     alphaGroups, 
                    Alphas = alphas 
                   }) 
        .Where(row => 
          row.AlphaGroups.Title.Contains("baby") 
          || row.Alphas.Any(alpha => alpha.Title.Contains("baby")) 
        ); 

的問題是,當一個Alpha.Title包含字符串「寶貝」,只顯示含有「寶貝」,而不是在每AlphaGroup阿爾法阿爾法的。如果AlphaGroup.Title包含「寶貝」,它應該繼續顯示組中的每個字母。我怎樣才能做到這一點?

+0

也許聯盟將是更適合於這種情況。一個返回符合條件的所有alpha,與符合條件的組中的所有alpha結合 –

回答

1

你可以嘗試像以下:

IEnumerable<ICD.ViewModels.HomeSearchViewModel> query = 
       ICDUnitOfWork.AlphaGroups.Find() 
          .GroupJoin(
            ICDUnitOfWork.Alphas.Find() 
               .GroupBy(a => new 
                   { 
                    BabyIndicator = a.Title.Contains("baby"), 
                    GroupID = a.AlphaGroupID 
                   }), 
            a => a.AlphaGroupID, 
            g => g.Key.GroupID, 
            (alphaGroups, alphas) => 
             new ICD.ViewModels.HomeSearchViewModel() 
             { 
              AlphaGroups = alphaGroups, 
              Alphas = alphaGroups.Title.Contains("baby") ? 
              alphas.Select(g => g.AsEnumerable()).Aggregate((g1,g2) => g1.Concat(g2)) : 
              alphas.Aggregate(
              (g1,g2) => g1.Key.BabyIndicator ? 
                 g1 : 
                 g2).AsEnumerable() 
             }) 

邏輯:

​​

在這裏,我們組的組ID以及他們是否有嬰兒的阿爾法,我們再組加入這個到alphGroups。所以我們有四種可能性,沒有組,沒有嬰兒的組,沒有嬰兒的組,沒有嬰兒的組,沒有嬰兒的組和只有一個嬰兒。爲了把這一切都彙總起來,如果沒有組,則返回沒有組,如果有一個組返回該組,則如果有兩個組,它只返回帶有嬰兒的組。

If the AlphaGroup.Title contains "baby" it should continue to show each alpha in the group.

在這裏,我們檢查的alphaGroup是否有標題的寶寶,如果它返回整個分組,如果不適用阿爾法主題邏輯

+0

我認爲這很接近,但是我收到了錯誤:Error 無法隱式轉換類型'System.Collections。 Generic.IEnumerable >'到'System.Collections.Generic.IEnumerable '。存在明確的轉換(您是否遺漏了演員?) – user547794

+0

@ user547794修正了Aggregate正在返回一個IEnumerable,但應該返回一個分組,因此我們只需投影分組的Enumerable位.... – user1793607