2009-10-26 127 views
17

在我的倉庫實現,我可以使用lambda表達式運行下面的查詢來查詢一個嵌套列表:如何使用lambda表達式

public IList<User> GetUsersFromCountry(string) 
{ 
    return _UserRepository.Where(x => x.Country == "Sweden").ToList();     
} 

到目前爲止好,簡單的東西。但是,我很難根據嵌套列表編寫lambda表達式。考慮下面的例子(抱歉想不出一個更好的):

下面的查詢工作絕對罰款和45

public IList<Clubs> GetGoldMembers() 
     { 
      var clubs = from c in ClubRepository 
          from m in c.Memberships 
          where m.User.Age > 45 
          select c; 

      return clubs; 
     } 

歲以上返回所有的俱樂部,其中有成員目前,這是我對lambda表達式知識的結束。

如何使用類似於上面的示例的lambda表達式來針對ClubRepository編寫上述查詢?

回答

23

這可能工作(未經測試)...

var clubs = ClubRepository.Where(c=>c.MemberShips.Any(m=>m.User.Age > 45)); 
+0

不錯!完美的作品。 – Flo 2009-10-27 09:27:13

+3

FWIW,這種方法很有效,但並沒有真正指出如何將多個'from'語句翻譯成LINQ方法。你需要SelectMany方法(這就是C#編譯器所做的)。 – 2009-10-27 09:39:58

14

下面是做這件事:

var clubs = clubRepository 
    .SelectMany(c => c.Memberships, (c, m) => new { c, m }) 
    .Where(x => x.m.User.Age > 45) 
    .Select(x => x.c); 
+2

可以請詳細說明一下這個查詢..謝謝 – 2011-04-24 18:05:17

+2

SelectMany()展平列表清單... http://stackoverflow.com/questions/958949/difference-betweenselect-and-selectmany – hagensoft 2013-08-22 01:08:15