LINQ: Когда использовать скомпилированные запросы?

Я хотел бы получить совет эксперта по этому поводу. Раньше я использовал скомпилированные запросы, но для этого конкретного случая я не уверен, подходит ли это.

Это форма поиска, в которой запрос меняется в зависимости от того, что ищется.

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 . Не уверен, что это имеет значение.

Спасибо

10
задан jzm 22 September 2011 в 03:24
поделиться