jzm*_*jzm 10 c# linq linq-to-sql compiled-query
我想就此提出一些专家建议.我之前使用过编译查询,但对于这种特殊情况,我不确定它是否合适.
它是一个搜索表单,其中查询更改并依赖于正在搜索的内容.
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
}));
Run Code Online (Sandbox Code Playgroud)
现在如果有人填写搜索框,我想通过向查询添加另一个Where语句来扩展查询:
var query = Search(context, 123);
query = query.Where(w => w.Name.Contains(searchString));
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,它将所有结果返回到哪里LocationID == 123,然后检查searchString匹配的结果?或者它实际上是否扩展了编译的查询?
如果它是前者(我怀疑它是),应该废弃CompiledQuery并只创建一个扩展查询的方法然后将其作为列表返回?
此外,最佳CompiledQuery使用方法是什么,是否有使用时间的指导原则?
注意:我在使用Linq to SQL的ASP.NET网站中使用上述内容.不确定这是否有所不同.
谢谢
问题是编译后的查询是一成不变的;它知道将对数据库运行什么 SQL。然而,lambda 表达式是延迟加载的,并且无法修改编译查询,因为它是在运行时运行的。坏消息是,它将返回数据库中的所有记录,但它将查询内存中的这些记录以进一步细化它们。
如果您想编译查询,那么我建议编写两个具有不同签名的查询。