如何使用lambda表达式查询嵌套列表

Flo*_*Flo 20 linq lambda

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

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

到目前为止,这么好,简单的东西.但是,我在编写嵌套 - >嵌套列表的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;
        }
Run Code Online (Sandbox Code Playgroud)

目前,这是我对lambda表达的知识结束的地方.

我如何使用lambda表达式对ClubRepository编写上述查询,类似于上面的示例?

Jas*_*yon 27

这可能有用(未经测试)......

var clubs = ClubRepository.Where(c=>c.MemberShips.Any(m=>m.User.Age > 45));
Run Code Online (Sandbox Code Playgroud)

  • FWIW,这种方法有效,但并没有真正说明如何将多个'from'语句转换为LINQ方法.你需要SelectMany方法(这就是C#编译器所做的). (3认同)

Mar*_*ann 17

这是一种方法:

var clubs = clubRepository
    .SelectMany(c => c.Memberships, (c, m) => new { c, m })
    .Where(x => x.m.User.Age > 45)
    .Select(x => x.c);
Run Code Online (Sandbox Code Playgroud)

  • 你能不能再详细说明一下这个问题.谢谢 (2认同)
  • SelectMany() 展平列表列表... http://stackoverflow.com/questions/958949/difference-between-select-and-selectmany (2认同)