可空列上的LINQ联接表

| 如何在可空列上联接表? 我有以下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))
所以我可以在查询中附加一个“ 4”。但是如何在LINQ中做到这一点,或者还有另一种选择? 先感谢您。 解: 问题在于,如果您查询整数列上的任何NULL值,则DataSet不支持Nullable-Types,但是会生成InvalidCastException(感谢Martinho)。 来自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
    
已邀请:
您是否尝试过将空检查添加到ѭ7adding子句中?
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
    
虽然您可以使用LINQ to Datasets解决此问题,但使用预定义的DataRelations而不是临时联接可能会发现更好的性能。有关数据关系的信息,请参见http://msdn.microsoft.com/zh-cn/library/dbwcse3d.aspx。 如果您确实使用LINQ到数据集,则可能要在http://www.manning.com/marguerie/上查看我们免费的第14章奖金。     

要回复问题请先登录注册