【问题标题】:Entity Framework generating sql queries without where clauses实体框架生成没有 where 子句的 sql 查询
【发布时间】:2015-11-12 03:52:06
【问题描述】:

在我的一个数据访问类中使用 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))。

尽管Entity Framework返回了正确的结果,但我不知道为什么它不是生成一个带有Where子句的Sql查询语句,如“Where name like '%' + textToSearch + '%'”,它生成一个sql查询语句没有 where 子句查询所有表行。显然这是非常无效的。

另一方面,如果在我的数据访问类中,我编写了这样的方法:

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

它会正确生成带有 where like 子句的 Sql。

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

谢谢

【问题讨论】:

    标签: c#-4.0 entity-framework-4


    【解决方案1】:

    您需要将表达式参数作为Expression&lt;&gt; 传递:

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

    如果您只传递一个Func&lt;&gt;,则调用IEnumerable.Where 而不是IQueryable.Where,它在代码中运行,而不是在SQL 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      相关资源
      最近更新 更多