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

Posted

技术标签:

【中文标题】如何使用 lambda 表达式查询嵌套列表【英文标题】:How to query a nested list using a lambda expression 【发布时间】: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 编写上述查询,类似于上面的示例?

【问题讨论】:

【参考方案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);

【讨论】:

SelectMany() 展平列表列表...***.com/questions/958949/…【参考方案3】:

更通用的方式

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

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

【讨论】:

以上是关于如何使用 lambda 表达式查询嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++11 中使用 Lambda 表达式

如何使用 lambda 表达式将 DataTable 记录添加到列表中? [复制]

C#如何使用 lambda 表达式将 iGrouping 返回到列表

如何使用 lambda 表达式对相同的列表进行排序?

如何使用 Lambda 表达式 .reduce() 方法减少给定列表

如何使用 linq 查询具有嵌套列表的对象?