小编典典

使用包含多个选项的实体框架查询

sql

使用实体框架返回人名列表,其中人名包含字符串数组中的文本。

比方说:

string[] search = new string[] { "bert", "rob" };

和查询

dataContext.People.Where(w => search.Any(a => w.Forename.Contains(a)));

这将编译并运行,但是该过程实际上是从数据库中调用所有记录,然后对返回的数据执行我的where子句。这是有道理的。

有没有一种方法可以重写查询,以便在SQL中生成where子句?


阅读 193

收藏
2021-03-23

共1个答案

小编典典

我假设dataContext.People是IQueryable来自的,DbSet并且不涉及实现的指令,例如ToList()AsEnumerable()

答案在这里:http :
//www.albahari.com/nutshell/predicatebuilder.aspx

在您的情况下:

var predicate = PredicateBuilder.False<People>();

foreach (string keyword in keywords)
{
    string temp = keyword;
    predicate = predicate.Or (p => p.Forename.Contains (temp));
}
dataContext.People.Where (predicate);
2021-03-23