在我的一个数据访问类中使用 Entity Framework 4.3 我有一个像这样的通用函数
public List<Company> Query(Func<Company, bool> expression)
{
return MyDbContext.Instance().Company.Where(expression).ToList();
}
我将它从业务层类中用作 MyDAL.Query(a => a.Name.Contains(textToSearch))。
尽管 ofEntity Framework 返回了正确的结果,但我不知道为什么它不是生成带有 Where 子句的 Sql 查询语句,如“Where name like '%' + textToSearch + '%'”,而是生成一个没有 where 的 sql 查询语句子句查询所有表行。显然,这是非常无效的。
另一方面,如果在我的数据访问类中,我编写了这样的方法:
public List<Company> GetLikeName(string textToSearch)
{
return MyDbContext.Instance().Company.Where(a => a.Contains(textToSearch)).ToList();
}
它正确生成带有 where like 子句的 Sql。
为什么如果我使用通用查询从数据库中检索结果,指定要从我的业务类中查询的表达式,它会生成一个没有 where 子句的 Sql 语句?
谢谢