Как мне выполнить рефакторинг скомпилированных запросов LINQ? - PullRequest
1 голос
/ 30 декабря 2010

Можно ли выполнить рефакторинг скомпилированных запросов LINQ to SQL?Предположим, что у меня есть запрос с некоторой логикой, и я хотел бы построить на нем.Можно ли повторно использовать этот запрос?

Например, предположим, у меня есть базовый запрос для получения активных элементов:

Func<DataContext, IQueryable<Item>> GetActiveItems =
    CompiledQuery.Compile((DataContext context) =>
        context.Items.Where(item => item.IsActive));

Я хотел бы использовать приведенное выше выражение для создания другогозапрос.Документация CompiledQuery указывает на то, что я не могу применить другой оператор к результату скомпилированного делегата.Итак, каков рекомендуемый способ рефакторинга таких выражений?

Я думаю, что я должен использовать Expression, но как его использовать?Или есть лучший способ?

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Вы можете использовать что-то вроде PredicateBuilder, чтобы помочь с этим:

Albahari один прост и работает довольно хорошо, хотя его легко расширять или развивать самостоятельно: http://www.albahari.com/nutshell/predicatebuilder.aspx

Очевидно, что если ваш запрос основан на локальном методе, который не может быть переведен в выражение SQL, вам придется переосмыслить, как вы это делаете.

0 голосов
/ 30 декабря 2010

Нет. Это скомпилировано, то есть уже переведено на sql. Вам нужно начать с нового запроса.

...