Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток!
А>Вопрос такой: как по вашему мнению правильнее всего организовать фильтрацию строк в формах, где отображаются списки бизнес-сущностей, загружаемых из базы данных в приложении на .NET. Например, есть диалог "Заказы". В нем есть Grid со списком заказов. В том же диалоге есть кнопка "фильтр", по нажатию на которую открывается диалог настройки фильтра (где можно задать номер или часть номера, дату заказа или интервал дат, заказчика или список заказчиков, общую сумму заказ или интервал сумм). Поскольку заказов может быть ОЧЕНЬ много и затягивать из СУБД их все слишком расточительно, то применение фильтра должно в конечном счете приводить к модификации текста запроса, уходящего в СУБД.
А>Интересует вариант с 3-хзвенной архитектурой, когда условие фильтрации (дерево выражений?) надо передавать с клиента на сервер приложений в форме отличной от SQL-запроса.
А>Я пока вижу часть решения так (для случая с "Заказами"):
А>1. Есть класс "Заказы", обвешанный атрибутами (пока не знаю какими именно), хранящими метаинформацию о бизнес-сущности "Заказ".
А>2. Некий контроллер фильтра при инициализации получает переменную типа Type:
А>А>FilterController fc = new FilterController(typeof(ЗАКАЗЫ))
А>
А>и на основе информации, содержащейся в атрибутах класса ЗАКАЗЫ настраивает FilterControl (наследник UserControl'а).
А>3. Пользователь, работая с FilterControl'ом, настраивает условия фильтрации в контроллере фильтра.
А>4. На выходе контроллер фильтра должен преобразовать полученное условие фильтрации в виде некоторого дерева выражений, пригодного для сериализации (его же надо передать посредствам WCF на сервер приложений) и интерпретации в SQL-код в слое DAL.
А>По-моему махровым велосипедом попахивает... LINQ, мне кажется, не совсем то, что нужно: хочется иметь один класс контроллера фильтров для всех классов бизнес-сущностей...
Можно покопать и готовенькое. Вот в таком направлении:
http://community.devexpress.com/blogs/thinking/archive/2009/07/14/winforms-expression-editor-for-all-devexpress-grid-controls.aspx
http://wareseeker.com/Software-Development/easyquery.net-winforms-2.0.0.zip/443740
А модель выражения, будь то expression tree или любая другая хрень, преобразовать в where-кляузу — халявная задача. Я не понял про какие Linq-провайдеры и человеконедели тут речь была. Самая трудоемкая хрень в этом всем — UI.