使用实体框架返回forename在字符串数组中包含文本的人员列表。
让我们说:
string[] search = new string[] { "bert", "rob" };
和查询
dataContext.People.Where(w => search.Any(a => w.Forename.Contains(a)));
这编译并运行但是该进程实际上是从数据库中调用所有记录,然后对返回的数据执行where子句。这是有道理的。
有没有办法重写查询,以便在SQL中生成where子句?
答案 0 :(得分:1)
我假设dataContext.People是来自IQueryable
的{{1}},并且没有涉及具体化说明,例如DbSet
或ToList()
。
答案在这里:http://www.albahari.com/nutshell/predicatebuilder.aspx
在你的情况下:
AsEnumerable()
答案 1 :(得分:0)
一种方法是使用SqlQuery并执行实际的SQL查询。
dataContext.Database.SqlQuery<People>("SELECT Forename, Lastname FROM myTable WHERE Forename LIKE '%bert%' or Forename LIKE '%rob%'");