使用 LINQ 的 INNER JOIN 3 数据表
Posted
技术标签:
【中文标题】使用 LINQ 的 INNER JOIN 3 数据表【英文标题】:INNER JOIN 3 Data Tables using LINQ 【发布时间】:2017-12-17 03:38:59 【问题描述】:尝试使用 LINQ 连接三个数据表 table1、table2、table3。表 1 和表 2 在 2 个条件下连接,表 1 和表 3 在 1 个条件下连接。以下是我的代码。但我得到一个例外说 “无法将 'System.DBNull' 类型的对象转换为 'System.String' 类型。”
下面是我的代码:
var result = from cust in tblCust.AsEnumerable()
join mat in tblMat.AsEnumerable()
new coil_id = (string)cust["coil_id"], order_id = (string)cust["order_id"]
equals
new coil_id = (string)mat["PIECE_ID"], order_id = (string)mat["PRODUCTION_ORDER_ID"]
join parts in tblParts.AsEnumerable() on (string)mat["PIECE_ID"] equals (string)parts["ProdCoilNo"]
select new
coil_id = mat["PIECE_ID"],
order_id = mat["PRODUCTION_ORDER_ID"],
part = parts["PartNumber"],
gauge = mat["THICKNESS"],
width = mat["WIDTH"],
weight = mat["WEIGHT"],
code = mat["MATERIAL_BLOCK_STATE"],
requestor_comment = cust["requestor_comment"],
requestor = cust["requestor"],
updated_by_comment = cust["updated_by_comment"],
updated_by_user = cust["updated_by_user"]
;
我在 (string)parts["ProdCoilNo"] 附近遇到异常
【问题讨论】:
【参考方案1】:对包含null的字段使用coalesce操作符替换为空字符串
像这样:
coil_id = mat["PIECE_ID"] ?? String.Empty,
【讨论】:
【参考方案2】:使用coalesce
运算符
var result = from cust in tblCust.AsEnumerable()
join mat in tblMat.AsEnumerable()
new coil_id = (string)cust["coil_id"], order_id = (string)cust["order_id"]
equals
new coil_id = (string)mat["PIECE_ID"], order_id = (string)mat["PRODUCTION_ORDER_ID"]
join parts in tblParts.AsEnumerable() on (string)mat["PIECE_ID"] equals (string)parts["ProdCoilNo"]
select new
coil_id = mat["PIECE_ID"]?? String.Empty,
order_id = mat["PRODUCTION_ORDER_ID"]?? String.Empty,
part = parts["PartNumber"]?? String.Empty,
gauge = mat["THICKNESS"]?? String.Empty,
width = mat["WIDTH"]?? String.Empty,
weight = mat["WEIGHT"]?? String.Empty,
code = mat["MATERIAL_BLOCK_STATE"]?? String.Empty,
requestor_comment = cust["requestor_comment"]?? String.Empty,
requestor = cust["requestor"]?? String.Empty,
updated_by_comment = cust["updated_by_comment"]?? String.Empty,
updated_by_user = cust["updated_by_user"]?? String.Empty
;
【讨论】:
没有帮助,.. 同样的异常以上是关于使用 LINQ 的 INNER JOIN 3 数据表的主要内容,如果未能解决你的问题,请参考以下文章
Linq GroupJoin (join...into) 导致 INNER JOIN?
带有 WHERE 子句的 SQL INNER JOIN 到 LINQ 格式
如何将 SQL Inner Join、Group By 转换为 Linq?