c# – LINQ:什么时候使用编译查询?
发布时间:2020-12-15 06:20:01 所属栏目:百科 来源:网络整理
导读:我想要一些专家的建议.以前我使用过编译的查询,但对于这种特殊情况,我不知道是否合适. 这是一个搜索表单,查询更改并依赖于正在搜索的内容. static FuncDBContext,int,IQueryableFoo Search = CompiledQuery.Compile( (DBContext db,int ID) = db.Person .Whe
我想要一些专家的建议.以前我使用过编译的查询,但对于这种特殊情况,我不知道是否合适.
这是一个搜索表单,查询更改并依赖于正在搜索的内容. static Func<DBContext,int,IQueryable<Foo>> Search = CompiledQuery.Compile( (DBContext db,int ID) => db.Person .Where(w => w.LocationID = ID) .Select(s => new Foo { Name = s.PersonName,Age = s.Age,Location = s.LocationName,Kin = s.Kin })); 现在如果有人填写搜索框,我想通过在查询中添加另一个Where语句来扩展查询: var query = Search(context,123); query = query.Where(w => w.Name.Contains(searchString)); 所以我的问题是,是否返回所有结果,其中LocationID == 123,然后检查一个searchString匹配的结果?还是实际扩展编译查询? 如果是前者(我怀疑它是),应该废弃CompiledQuery,只需创建一个扩展查询的方法,然后将其作为列表返回; 此外,CompiledQuery使用的最佳做法是什么?是否应该使用它们的准则? 注意:我在ASP.NET网站中使用了以上的Linq to SQL.不知道是否有所作为. 谢谢 解决方法
问题是编译查询是在石头上设置的;它知道它将对数据库运行什么SQL. lambda表达式是延迟加载的,并且无法修改编译查询,因为它在运行时运行.坏消息是它会从数据库返回所有的记录,但它会查询内存中的这些记录,以进一步细化它们.
如果你想编译查询,那么我建议用不同的签名编写两个查询. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |