5

如何在可空列上加入表?

我有以下 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

我在以下位置收到“从类型 'DBNull' 到类型 'Integer' 的转换无效” query.ToArray()

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(感谢 Martinho),则会生成 InvalidCastException。dahlbyk 修改后的 LINQ 查询几乎不需要修改。在这种情况下,DataSet 为 AllowDbNull=True 的每一列生成一个布尔属性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
4

2 回答 2

3

您是否尝试将空检查添加到您的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
于 2011-04-18T02:27:56.753 回答
0

While you can use LINQ to Datasets to solve this issue, you might find better performance using the predefined DataRelations instead of ad-hoc joins. See http://msdn.microsoft.com/en-us/library/dbwcse3d.aspx for information about data relations.

If you do use LINQ to Datasets, you might want to check out our free bonus chapter 14 on them at http://www.manning.com/marguerie/.

于 2011-10-19T18:20:09.533 回答