LINQ и динамические запросы с подкачкой и без LINQ2SQL - PullRequest
1 голос
/ 26 ноября 2009

Я пробовал несколько способов использовать динамические запросы 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. Возможно ли это?

1 Ответ

0 голосов
/ 26 ноября 2009

Конечно, возможно, вам нужно создать собственный IQueryable, «пользовательский поставщик LINQ»

Вот статья MSDN: http://msdn.microsoft.com/en-us/library/bb546158.aspx а у Мэтта Уоррена есть серия блогов: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

Я рекомендую начать с него, чтобы понять, насколько сложным оно может быть и стоит ли оно того для вас!

Если вы решите против этого, прочитайте это сообщение в блоге: http://www.hanselman.com/blog/RealWorldAppsInDaysNotWeeks.aspx и посмотрим, будут ли вам полезны ADO.Net Data Services (Astoria)

...