我正在尝试使用 Sqlkata 构建 Sql 查询。我能够为一个连接条件构建正确的 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);
Run Code Online (Sandbox Code Playgroud)
最终查询 -empDeptSqlKataQuery.Sql 是
SELECT [employee].[Name], [dept].[Deptname] FROM [employee]
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid])
Run Code Online (Sandbox Code Playgroud)
我想在 join 子句中添加更多条件,如下所示。
SELECT [employee].[Name], [dept].[Deptname] FROM [employee]
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid] And [employee].[empdeptname]=[dept].[departmentName])
Run Code Online (Sandbox Code Playgroud)
我试过这个,但没有得到我的预期
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);
Run Code Online (Sandbox Code Playgroud)
使用上述方法的最终 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])
Run Code Online (Sandbox Code Playgroud)
请让我知道如何解决这个问题
根据需要使用On或WhereX方法,例如
new Query("employee")
.Select("employee.Name", "dept.Deptname")
.Join("dept",
j => j.On("employee.deptid", "dept.deptid")
.On("employee.countryid", "dept.countryid")
)
Run Code Online (Sandbox Code Playgroud)
请注意,这On只是该WhereColumns方法的别名,因此所有WhereX方法也可在此上下文中使用