【问题标题】:How to query a nested list using a lambda expression如何使用 lambda 表达式查询嵌套列表
【发布时间】:2010-12-10 06:36:15
【问题描述】:

在我的存储库实现中,我可以使用 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 编写上述查询,类似于上面的示例?

【问题讨论】:

    标签: linq lambda


    【解决方案1】:

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

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

    【讨论】:

    • FWIW,这种方法有效,但并没有真正说明如何将多个“来自”语句转换为 LINQ 方法。为此,您需要 SelectMany 方法(这就是 C# 编译器所做的)。
    【解决方案2】:

    这是一种方法:

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

    【讨论】:

    【解决方案3】:

    更通用的方式

    List<T> list= new List<T>();
    list= object1.NestedList1.SelectMany(x => x.NestedList2).ToList();
    

    其中 NestedList2 匹配“列表”的数据类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2018-05-14
      • 1970-01-01
      相关资源
      最近更新 更多