关于Linq:如何使用lambda表达式查询嵌套列表

How to query a nested list using a lambda expression

在我的知识库实现中,我可以使用lambda表达式运行以下查询:

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

到目前为止一切都很好,很简单。但是,我很难针对嵌套的->嵌套列表编写lambda表达式。举个例子(抱歉,我想不出更好的例子):

以下查询完全有效,并返回所有成员年龄超过45岁的俱乐部

1
2
3
4
5
6
7
8
9
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编写上述查询,类似于上面的示例?


这可能有效(未经测试)…

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


有一种方法可以做到:

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