动态LINQ OR条件

Kyl*_*yle 14 linq

我正在寻找使用LINQ来做多个类似于集合的条件

IEnumerable<Object> items;
items.Where(p => p.FirstName = "John");
items.Where(p => p.LastName = "Smith");
Run Code Online (Sandbox Code Playgroud)

除了没有多个AND条件(如本例所示),我想要有多个OR条件.

编辑 对不起,澄清我不知道我将有多少这些条件

items.Where(p => p.FirstName = "John" || p => p.LastName = "Smith")
Run Code Online (Sandbox Code Playgroud)

不行.

基本上,这是我正在尝试做的事情:

foreach(var name in names)
{
    items = items.Where(p => p.Name == name);
}
Run Code Online (Sandbox Code Playgroud)

as-*_*cii 13

使用PredicateBuilder:

假设您要编写实现关键字样式搜索的LINQ to SQL或Entity Framework查询.换句话说,一个返回行描述包含一组或全部给定关键字的行的查询......

理想的方法是动态构造一个执行基于的谓词的lambda表达式树.

在推动您手动构建表达式树的所有事情中,动态谓词的需求是典型业务应用程序中最常见的.幸运的是,可以编写一组简单且可重用的扩展方法,从根本上简化此任务.这是我们PredicateBuilder类的作用......


Jay*_*Jay 10

您可以使用.Union()返回满足任何条件的结果.

var results = items.Where(p => p.FirstName == "John")
     .Union(items.Where(p => p.LastName == "Smith"));
Run Code Online (Sandbox Code Playgroud)

这不如使用||操作员.从您的编辑中不清楚为什么这不起作用.


p.c*_*ell 8

听起来你的名字白名单只在运行时才知道.也许尝试这个:

string[] names = new string[] {"John", "foo", "bar"};

var matching = items.Where(x => names.Contains(x.Name));
Run Code Online (Sandbox Code Playgroud)