You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ADO.NET连表查询改写为SqlKata写法并解决Join参数报错

正确改写实现

using SqlKata;
using SqlKata.Compilers;
using SqlKata.Execution;
using System.Data.SqlClient;

internal static string GetPartNumberId(string partNumber, int type, SqlConnection connection)
{
    // 若项目中已全局初始化QueryFactory可直接复用,无需重复创建
    var compiler = new SqlServerCompiler();
    var db = new QueryFactory(connection, compiler);

    return db.Query("EED_OBJ_Entity as e")
        .Select("e.ID")
        // 等值关联直接用基础Join重载即可,三个参数分别为:关联表+别名、左表关联字段、右表关联字段
        .Join("EED_OBJ_Categories as c", "e.IDCategory", "c.ID")
        // SqlKata自动处理参数绑定,无需手动构造SqlParameter
        .Where("e.PartNo", partNumber)
        .Where("c.Type", type)
        // 等价于原生ADO.NET的ExecuteScalar,直接取第一行第一列结果
        .FirstOrDefault<string>();
}

报错原因说明

你之前的写法误用了Join方法的重载:只有非等值关联场景才需要用到传入Lambda表达式的Join重载,普通等值关联直接传入3个参数即可,不需要嵌套Lambda表达式,所以触发了参数数量不匹配的报错。

补充优化建议

如果需要兼容原代码无匹配数据时的ToString()调用逻辑,可以增加空值判断避免空引用异常:

var result = db.Query(...) // 省略查询逻辑
    .FirstOrDefault<string>();
return result?.ToString() ?? string.Empty;

内容的提问来源于stack exchange,提问作者RRuseva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:57:02