使用实体框架返回人名列表,其中人名包含字符串数组中的文本。
比方说:
string[] search = new string[] { "bert", "rob" };
和查询
dataContext.People.Where(w => search.Any(a => w.Forename.Contains(a)));
这将编译并运行,但是该过程实际上是从数据库中调用所有记录,然后对返回的数据执行我的where子句。这很有道理。
有没有一种方法可以重写查询,以便在SQL中生成where子句?
最佳答案
我假设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);
关于sql - 使用包含多个选项的 Entity Framework 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59273174/