Я хотел бы получить совет специалиста по этому вопросу. Я использовал скомпилированные запросы раньше, но для этого конкретного случая я не уверен, подходит ли он.
Это поисковая форма, в которой запрос изменяется и зависит от того, что ищется.
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 . Не уверен, что это имеет какое-то значение.
Спасибо