我正在编写一种方法,允许用户根据某些条件从表中搜索记录。他们可能并不总是提交所有标准,因此我正在尝试制作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分钟)。他们为什么如此不同?我想使用第二个构造,因此我可以根据用户是否包含特定条件来构建查询对象。我在这里缺少什么?
答案 0 :(得分:4)
此行不正确:
query.Where(a => a.ANID == "5F180A0000K0");
应该是:
query = query.Where(a => a.ANID == "5F180A0000K0");
Where
方法是一个返回新IQueryable的函数。它不会修改调用它的IQueryable。