c# – LINQ:什么时候使用编译查询?

我想要一些专家的建议.以前我使用过编译的查询,但对于这种特殊情况,我不知道是否合适.

这是一个搜索表单,查询更改并依赖于正在搜索内容.

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表达式是延迟加载的,并且无法修改编译查询,因为它在运行时运行.坏消息是它会从数据库返回所有的记录,但它会查询内存中的这些记录,以进一步细化它们.

如果你想编译查询,那么我建议用不同的签名编写两个查询.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...