如何使用 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 表达式查询嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 lambda 表达式将 DataTable 记录添加到列表中? [复制]
C#如何使用 lambda 表达式将 iGrouping 返回到列表