Шаблоны или методы для создания гибкого расширенного поиска с деревьями выражений Linq - PullRequest
1 голос
/ 23 января 2009

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

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

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

1 Ответ

1 голос
/ 24 января 2009

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

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

...