Мне было поручено написать приложение winforms c #, которое позволяет пользователям запускать специальные запросы.Я искал в Интернете и нашел много инструментов, которые можно купить ( EasyQuery ), но в данный момент о покупке не может быть и речи.
Так что я пытаюсь написать это сам.На данный момент я создал древовидное представление, которое заполняется во время выполнения таблицами / столбцами, и я могу выбрать столбцы, которые проверяются пользователями.Но теперь я должен выяснить, как динамически JOIN
таблицы, которые они выбрали.
Ниже приведена структура частичной таблицы:
Table - Roles - PK = RoleId
RoleId
RoleName
Table - Center PK = CenterId/RoleId/Prefix
CenterId
RoleId
Prefix
Table - Employee - PK = EmployeeID
EmployeeId
Name
CenterId
Dept
Org
Table - Prof - PK = EmployeeId/Profile
EmployeeId
Profile
У меня есть 6 таблиц, которые можно объединять в различных полях, но поскольку пользователям необходимо объединяться на лету, мне нужноопределить JOIN
, когда они хотят сгенерировать SQL.На данный момент я не знаю лучший способ приступить к генерации этих JOINs
.
Я даже думал о создании таблицы в базе данных с перечислением JOINs
для каждой таблицы / столбца, а затем я мог просто построить ее оттуда, но я в растерянности.
Iтакже пытался что-то похожее на это, но я не хочу идти по неверному пути, если есть предложения для другого пути:
private void GetJoins()
{
string joinList = string.Empty;
foreach (TreeNode tn in TablesTreeView.Nodes)
{
if (tn.Checked)
if (tn.Nodes.Count > 0) // this would be parent items only
{
foreach (TreeNode childNode in tn.Nodes)
{
// for first child checked
// check the next checked parent nodes for matching checked fields
// if next parent node has same field name checked then add the JOIN
}
}
}
}
Кажется ли, что это на правильном пути, или вы можетепредложить другой способ?
Я знаю, что это будет невероятно трудная задача, и я даже не дошел до динамического предложения WHERE
.Я просто ищу совет о том, как лучше создать JOINs
на специальной основе.