Как сформировать несколько SQL-запросов условий соединения в Sqlkata - PullRequest
2 голосов
/ 14 мая 2019

Я пытаюсь построить Sql Query, используя Sqlkata. Я могу построить правильный SQL-запрос для одного условия соединения, но для And Condition я сталкиваюсь с проблемами

var empDeptQuery = new Query("employee");
empDeptQuery.Select("employee.Name", "dept.Deptname");
empDeptQuery.Join("dept", join => join.On("employee.deptid", "dept.deptid"));          

SqlResult empDeptSqlKataQuery = compiler.Compile(empDeptQuery);

Окончательный запрос -empDeptSqlKataQuery.Sql равен

SELECT [employee].[Name], [dept].[Deptname] FROM [employee] 
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid])

Я хочу добавить дополнительные условия в предложении соединения следующим образом.

SELECT [employee].[Name], [dept].[Deptname] FROM [employee] 
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid] And [employee].[empdeptname]=[dept].[departmentName])

Я попробовал это, но не получил то, что ожидал

var empDeptQuery = new Query("employee");
empDeptQuery.Select("employee.Name", "dept.Deptname");
empDeptQuery.Join("dept", join => join.On("employee.deptid", "dept.deptid"));
empDeptQuery.Join(empDeptQuery, join => join.On("employee.empdeptname", "dept.departmentName"));

 SqlResult empDeptSqlKataQuery = compiler.Compile(empDeptQuery);

Итоговый запрос Sql с вышеуказанным подходом:

SELECT [employee].[Name], [dept].[Deptname] FROM [employee] 
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid])
INNER JOIN (SELECT [employee].[Name], [dept].[Deptname] FROM [employee] 
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid])) ON ([employee].[empdeptname] = [dept].[departmentName])

Пожалуйста, дайте мне знать, как решить проблему

1 Ответ

1 голос
/ 15 мая 2019

При необходимости используйте методы On или WhereX, например,

new Query("employee")
    .Select("employee.Name", "dept.Deptname")
    .Join("dept", 
        j => j.On("employee.deptid", "dept.deptid")
            .On("employee.countryid", "dept.countryid")            
    )

. Обратите внимание, что On является просто псевдонимом для метода WhereColumns, поэтому все методы WhereX работают.в этом контексте также

...