我想要一些专家的建议。我以前使用过编译查询,但对于这种特殊情况,我不确定它是否合适。
这是一种搜索表单,其中查询会发生变化,并且取决于正在搜索的内容。
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));
所以我的问题是,它是否返回所有结果 where LocationID == 123
,然后检查结果是否searchString
匹配?或者它实际上是在扩展已编译的查询?
如果是前者(我怀疑是),是否应该废弃CompiledQuery
并创建一个扩展查询的方法,然后将其作为列表返回?
此外,使用的最佳实践是什么CompiledQuery
,是否有什么时候应该使用它们的指南?
注意:我在带有Linq to SQL的ASP.NET网站中使用上述内容。不确定这是否有任何区别。
谢谢