我有一个 LINQ 查询(将针对 DbContext 执行),我首先使用我事先知道的一些条件进行构建。
var r = from p in db.People
where blah
select p;
然后我有一堆搜索条件,以数组 (string[]) 的形式提供。如果我想做一个 AND,这很简单:
foreach (string s in searchParameters)
{
r = from r1 in r
where r1.field == s
select r1;
}
但是,我现在需要以 OR 方式使用这些参数。一种解决方案是执行以下操作:
var results = new List<IEnumerable<RowType>>();
foreach (string s in searchParameters)
{
var r2 = from r1 in r
where r1.field == s
select r1;
results.Add(r2);
}
然后,最后对“结果”中的所有条目进行 UNION。但是,这将转化为对数据库进行更加不必要的复杂查询,并且还会引入潜在的重复行,然后我需要对这些行进行重复数据删除。
有没有一种简单有效的方法来实现我想要做的事情?
谢谢
最佳答案
您需要使用PredicateBuilder
,如果我理解正确,您正在进行单个查询,并且您需要其中的条件
IQueryable<Product> SearchProducts (params string[] keywords)
{
var predicate = PredicateBuilder.False<Product>();
foreach (string keyword in keywords)
{
string temp = keyword;
predicate = predicate.Or (p => p.Description.Contains (temp));
}
return dataContext.Products.Where (predicate);
}
关于entity-framework - 在循环中构建 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50022713/