c# - C# 谓词生成器混淆

标签 c# linq predicatebuilder

我正在尝试了解谓词构建器,以便我可以将其应用到我正在创建的网络应用程序中。

基本上,我有 4 个通过 POST 请求传入的参数,“姓名”、“位置”、“年龄”、“性别”,并且我必须根据这些参数从数据库表中过滤掉人员。

问题是,每个参数都有可能是“All”(意思是,如果 name = 'All',则意味着不按名称过滤人员,如果 location = 'All' 则不按位置过滤人员ETC...)。

所以我想到的一种方法是将所有人放入一个列表中,并有 4 个 if 语句:

if (name != 'All') {
 //filter list of people by name string
}
if (location != 'All') {
 //filter list of people by location
}

但我不想这样做,我想使用谓词生成器来构建 linq 表达式,并且只获取与参数匹配的人员列表,但我不明白谓词生成器在做什么。

This是我正在查看的网站,但它并没有真正解释正在发生的事情,而且我不知道如何将其应用到我的情况

最佳答案

也许我不明白这个问题,但为什么你不能这样做:

query = name == "All" ? query : query.Where(x => x.Name == name);
query = location == "All" ? query : query.Where(x => x.Location == location);

针对您的具体情况,我认为您需要做的是:

var query = db.People;
query = name == "All" ? query : query.Where(x => x.Name == name);
query = location == "All" ? query : query.Where(x => x.Location == location);
query = age == "All" ? query : query.Where(x => x.Age == age);
query = weight == "All" ? query : query.Where(x => x.Weight == weight);
var results = query.ToList();

关于c# - C# 谓词生成器混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27947423/

相关文章:

c# - 使用 List<T>.Contains 方法为 LINQ 构建表达式树

linq - C# Entity Framework 4.1 : include paths in query for loading related objects

c# - PredicateBuilder "And"方法不起作用

c# - 用于重复比较的谓词表达式函数

c# - 将数据库中的图像注入(inject)到 sql 报告查询中

c# - 在 C# 中为 Dapper 创建动态类型

c# - 如何在 SQL 查询中将列名设置为参数?

c# - 通过 C# 第四版的 CLR。 - 对等待任务死锁感到困惑

c# - Linq.Max InvalidOperationException(结果中没有元素)

core-data - Xcode 4 中带有核心数据的图形谓词生成器