2012-05-07 49 views
0

使用实体框架4.3在我的数据访问类的我有这样的实体框架生成的SQL查询没有where子句

public List<Company> Query(Func<Company, bool> expression) 
    { 
     return MyDbContext.Instance().Company.Where(expression).ToList(); 
    } 

我用它从bussines层类作为MyDAL.Query泛型函数(一=> a.Name.Contains(textToSearch))。

尽管Entity Framework返回正确的结果,但我不知道为什么它会生成一个Sql查询语句,并在Where子句中使用“Where name like'%'+ textToSearch +'%'”,它会生成一个sql查询没有where子句的句子查询所有的表格行。显然这非常不利。

通过其他方式,如果在我的数据访问clases我写这样的方法:

public List<Company> GetLikeName(string textToSearch) 
    { 
     return MyDbContext.Instance().Company.Where(a => a.Contains(textToSearch)).ToList(); 
    } 

它生成正确地在那里同样子句的SQL语句。

为什么如果我使用我的通用查询从数据库检索结果指定从我的商务类查询表达式,它会生成一个没有where子句的Sql句子?

感谢

回答

4

您需要通过表达参数作为Expression<>

public List<Company> Query(Expression<Func<Company, bool>> expression) 

如果你只是传递一个Func<>,然后IEnumerable.Where被调用,而不是IQueryable.Where,并在代码运行,而不是在SQL。

+0

完美!有用。感谢您的帮助 –

+0

不客气:) –