Как предвестник моего ответа, есть ряд дорогих продуктов, таких как Izenda (www.izenda.com), которые сделают это очень элегантно ...
Если вы хотите свернуть свое собственное (и поговорить с вашим вопросом), вы можете подделать это довольно быстро (и да, это плохо масштабируется до более чем 4 соединений), как это:
- Создайте оператор соединения, который охватывает все ваши таблицы, которые вы хотите использовать.
Создайте словарь всех доступных полей, которые вы хотите предоставить пользователю, например: Dictionary = Dictionary <[Довольно отображаемое имя], [<strong> полностью определено Имя поля Sql]>
Позвольте пользователю создать список выбора полей, которые он хочет видеть, и условия, которые он хочет добавить из словаря выше, и использовать значение словаря для объединения строки SQL, которая необходима для возврата его результатов.
(Я пропускаю довольно много работы по проверке того, чтобы убедиться, что пользователь не пытается неправильно ввести условие и тому подобное, но, по сути, смысл в том, что для небольшой коллекции таблиц вы можете создать статический оператор «from», а затем безопасно прикрепить к конкатетам «select» и «where», которые создает пользователь)
Обратите внимание, что я работал на некоторых системах, которые на самом деле сохраняли отношения таблицы и скомпилировали наиболее эффективный из возможных операторов "from" ... это не так уж и сложно, просто немного больше работы.