Я пробовал несколько способов использовать динамические запросы LINQ - LINQKit и
Библиотека динамических запросов LINQ. Мне не нравится второе, потому что оно каким-то образом убивает идею LINQ - возможность проверять запросы во время компиляции. И с LINQKit я не нашел хороший пример для моего сценария. Также я не люблю чрезмерное использование отражения.
Мой сценарий следующий. У меня есть веб-сервис, который занимается бизнес-логикой и логикой DAL. Приложение webforms отделено. У меня есть страница с галочками для каждого поля, которое пользователь хотел бы отфильтровать, а также текстовое поле для ввода каждого значения фильтра. В моем веб-сервисе есть метод GetByFilter, в котором я передаю список. QueryObject - это класс со строкой: filedName, object: fieldValue.
Тогда мой веб-сервис получает список объектов запроса, и теперь возникает большой вопрос: как перевести его в запрос LINQ, если число полей и значения фильтров могут различаться?
Что еще хуже - я не использую LINQ2SQL, но я использую несколько пользовательских DAL с репозиториями, которые могут возвращать IQuery при необходимости (например, так:
http://msdn.microsoft.com/en-us/magazine/dd569757.aspx
выделите хранилище).
Я знаю, что могу использовать подкачку с LINQ2SQL:
var PagedData = query.Skip ((iPageNum - 1) * iPageSize) .Take (iPageSize);
Так как же тогда я могу получить параметры динамического запроса (и iPageNum и iPageSize) из LINQ в мою базовую реализацию DAL для выполнения этих запросов специфичным для поставщика данных способом? Может быть, я должен реализовать свой DAL как некоторый поставщик данных LINQ (я понятия не имею, как это сделать)?
Проблема в том, что я не хочу зависеть от LINQ2SQL (тогда я мог бы просто реализовать свои репозитории в качестве оболочки для LINQ2SQL), но в то же время я хочу, чтобы LINQ запрашивал возможности везде, кроме моего DAL. Возможно ли это?