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)")
)
附带说明一下,不建议根据计算的表达式执行连接,这可能会导致性能问题。
我正在尝试使用 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)")
)
附带说明一下,不建议根据计算的表达式执行连接,这可能会导致性能问题。