Шаблоны или методы для разработки гибкого расширенного поиска с помощью деревьев выражений Linq

Я хочу добавить в свое приложение ASP.NET/SQL Server 2005 возможность «расширенного поиска». В идеале я бы хотел, чтобы он управлялся таблицей. Например, если моя схема изменяется с добавлением нового столбца в таблицу, в которой я хочу выполнить поиск, я бы хотел, чтобы пользовательский интерфейс отражал добавление нового столбца в качестве поля с возможностью поиска. Я могу представить себе некоторые управляющие таблицы, которые содержат доступные для поиска поля, их типы, связанные поисковые запросы и т. Д.

С этими таблицами можно обращаться при построении пользовательского интерфейса. Мой вопрос связан с наилучшим подходом к созданию динамического SQL. Один из подходов - это создать параметризованный оператор SQL самостоятельно. Но меня заинтриговал Linq, и почему-то я думаю, что пространство имен System.Linq.Dynamic - и деревья выражений Linq - могут предоставить более элегантное / надежное решение?

Надеюсь, любое такое решение будет работать либо с Linq to Sql, либо с Linq to Entities. Правильно ли я исследовал этот путь, или это проблемное пространство на самом деле не является одним из вариантов использования деревьев выражений?


person Howard Pinsley    schedule 23.01.2009    source источник


Ответы (1)


Вы можете использовать деревья выражений, построив дерево, которое сравнивает все поля в схеме, а затем передав это выражение в Linq2Sql, чтобы вернуть нужный вам sql. Но зачем беспокоиться? Это больше усилий по программированию, код будет труднее понять, и нет никакой пользы, кроме теоретической возможности менять поставщиков данных.

(Привет, Ховард) - действительно - работа со строками в этом случае будет намного проще, чем с деревьями выражений. С другой стороны, если вы собираетесь предоставить своим пользователям небольшой язык запросов, тогда вам пригодятся деревья выражений.

person Scott Weinstein    schedule 23.01.2009
comment
Привет, Скотт (мой друг по alt.net ... это Говард Пинсли) ... так ты предлагаешь создать строковое представление параметризованного запроса? - person Howard Pinsley; 24.01.2009