SQLKata Inner Join 使用 LEFT 字符串函数

SQLKata Inner Join using LEFT string function

我正在尝试使用 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();

但是失败并显示错误 'The multi-part identifier could not be bound'。

似乎也没有我可以在 sqlKata 中使用的 JoinRaw。有谁知道我是否可以在 sql kata 中创建左字符串函数并在上面的查询中使用?

这里的问题是 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)")
)

附带说明一下,不建议根据计算的表达式执行连接,这可能会导致性能问题。