如何将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
相关产品推荐
相关产品推荐

