如何在可为空的列上连接表?
我有以下 LINQ 查询,RMA.fiCharge
可以为 NULL:
Dim query = From charge In Services.dsERP.ERP_Charge _
Join rma In Services.dsRMA.RMA _
On charge.idCharge Equals rma.fiCharge _
Where rma.IMEI = imei
Select charge.idCharge
我在 query.ToArray()
中收到“从类型“DBNull”到类型“Integer”的转换无效”:
Dim filter = _
String.Format(Services.dsERP.ERP_Charge.idChargeColumn.ColumnName & " IN({0})", String.Join(",", query.ToArray))
所以我可以在查询中附加一个WHERE RMA.fiCharge IS NOT NULL
。但是如何在 LINQ 中做到这一点或者还有其他选择吗?
提前谢谢您。
<小时/>解决方案:
问题是 DataSet 不支持 Nullable-Types,但如果您在整数列上查询任何 NULL-Values,则会生成 InvalidCastException(感谢 Martinho)。
dahlbyk 修改后的 LINQ 查询只需很少的修改即可工作。 DataSet 为每个允许 DbNull=True 的列生成一个 bool 属性,在本例中为 IsfiChargeNull
。
Dim query = From charge In Services.dsERP.ERP_Charge _
Join rma In (From rma In Services.dsRMA.RMA _
Where Not rma.IsfiChargeNull
Select rma)
On charge.idCharge Equals rma.fiCharge _
Where rma.IMEI = imei
Select charge.idCharge
最佳答案
您是否尝试过将 null 检查添加到 where
子句中?
Dim query = From charge In Services.dsERP.ERP_Charge _
Join rma In Services.dsRMA.RMA _
On charge.idCharge Equals rma.fiCharge _
Where rma.fiCharge <> Nothing AndAlso rma.IMEI = imei
Select charge.idCharge
如果这不起作用,您可以尝试这样的操作:
Dim query = From charge In Services.dsERP.ERP_Charge _
Join rma In (From rma in Services.dsRMA.RMA _
Where rma.fiCharge IsNot Nothing
Select rma)
On charge.idCharge Equals rma.fiCharge _
Where rma.IMEI = imei
Select charge.idCharge
关于.net - LINQ-在可为空的列上连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5696888/