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

比方说:

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


和查询

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


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

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

最佳答案

我假设dataContext.People是IQueryableDbSet,并且不涉及诸如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);

关于sql - 使用包含多个选项的 Entity Framework 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59273174/

10-16 13:30