首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Sqlkata中形成多连接条件sql查询

如何在Sqlkata中形成多连接条件sql查询
EN

Stack Overflow用户
提问于 2019-05-14 18:20:24
回答 2查看 2.7K关注 0票数 7

我正在尝试通过使用Sqlkat.来构建Sql查询。我能够为一个连接条件构建正确的sql查询,但for和条件遇到了问题

代码语言:javascript
复制
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为

代码语言:javascript
复制
SELECT [employee].[Name], [dept].[Deptname] FROM [employee] 
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid])

我想在join子句中添加更多条件,如下所示。

代码语言:javascript
复制
SELECT [employee].[Name], [dept].[Deptname] FROM [employee] 
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid] And [employee].[empdeptname]=[dept].[departmentName])

我试过了,但没有得到我想要的

代码语言:javascript
复制
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查询:

代码语言:javascript
复制
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])

请让我知道如何解决这个问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-15 17:14:21

根据需要使用OnWhereX方法,例如

代码语言:javascript
复制
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方法也在此上下文中工作

票数 5
EN

Stack Overflow用户

发布于 2019-10-05 02:14:35

当您的on条件不是常量时,您可以只定义此ext方法

代码语言:javascript
复制
internal static class SqlKataExt
{
    internal static Join On(this Join j, List<Tuple<string, string>> onConditions, string op = "=")
    {
        foreach (var o in onConditions)
        {
            j = j.On(o.Item1, o.Item2);
        }
        return j;
    }
}

其中onConditions表示成对条件的列表。

例如:{{"t1.col1", "t2.col1"}, {"t1.col2", "t2.col2"}...}

然后像这样使用它

代码语言:javascript
复制
            SqlKata.Query query = new SqlKata.Query();
            query = query.LeftJoin(inner, j => j.On(onConditions));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56128169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档