实体框架查询速度的巨大差异。但为什么?

时间:2015-07-30 02:19:57

标签: sql-server linq entity-framework

我正在编写一种方法,允许用户根据某些条件从表中搜索记录。他们可能并不总是提交所有标准,因此我正在尝试制作EF查询,以便可以根据用户提供的条件将其构建成碎片。相关文章在这里:

using (var db = new EntityModels.My_Entities())
{
    //very fast
    List<EntityModels.TBLEFFORT> effs = db.TBLEFFORT.Where(a => a.ANID == "5F180A0000K0").ToList();

    //very slow
    IQueryable<EntityModels.TBLEFFORT> query = db.TBLEFFORT.AsQueryable();
    query.Where(a => a.ANID == "5F180A0000K0");
    List<EntityModels.TBLEFFORT> efforts = query.ToList();
}

第一行非常快速地运行并返回150条左右的记录。 第二个构造需要更长的时间,甚至不愿意等待(至少在我放弃前2分钟)。他们为什么如此不同?我想使用第二个构造,因此我可以根据用户是否包含特定条件来构建查询对象。我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

此行不正确:

query.Where(a => a.ANID == "5F180A0000K0");

应该是:

query = query.Where(a => a.ANID == "5F180A0000K0");

Where方法是一个返回新IQueryable的函数。它不会修改调用它的IQueryable。