我希望得到一些专家意见。我之前使用过编译查询,但对于这种特殊情况,我不确定是否适用。
这是一个搜索表单,查询会根据正在搜索的内容而变化。
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
的最佳实践是什么,何时应该使用它们的指南是什么?注意:我在使用带有Linq to SQL的ASP.NET网站。不确定是否有任何区别。
谢谢