1

我正在尝试使用 SQLKata for SQLServer 编写以下查询:

SELECT Company FROM Table1 INNER JOIN Table2 ON LEFT(Table1.[Company], 5) = LEFT(Table2.accountName, 5)

我尝试了以下方法:

        var db = new QueryFactory(connection, compiler);


        var query = db.Query("Table1")
            .Join("Table2", "LEFT([Table1].[Company],5)", "LEFT([Table2].[accountName],5)")
            .Select("Company").Get();

但是失败并出现错误“无法绑定多部分标识符”。

看来我也没有可以在 sqlKata 中使用的 JoinRaw。有谁知道是否有一种方法可以在 sql kata 中创建一个左字符串函数并在上面的查询中使用?

4

1 回答 1

1

这里的问题是 Sqlkata 期望列名作为Join方法参数中的字符串,没有任何包装器或函数,原因是为了防止 SQL 注入,所以这里不允许使用表达式。

对于这种情况,您可以使用FromRaw方法(请参阅https://sqlkata.com/docs/from#from-a-raw-expression)。

db.Query().FromRaw("[Table1] JOIN [Table2] LEFT([Table1].[Company],5) ON LEFT([Table2].[AccountName],5)")

在即将到来的版本中,您可以为此类情况注入RawExpression,但这尚未正式发布。

db.Query("Table1").Join(
  "Table2", 
  Raw("Left([Table1].[Company], 5)"), 
  Raw("Left([Table2].[AccountName], 5)")
)

在旁注中,不建议基于评估的表达式执行连接,这可能会导致性能问题。

于 2019-11-28T18:05:30.197 回答