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