Tim*_*ter 5 .net linq vb.net linq-to-dataset
如何在可空列上加入表?
我有以下 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
Run Code Online (Sandbox Code Playgroud)
我在以下位置收到“从'DBNull'类型转换为'Integer'类型无效” query.ToArray():
Dim filter = _
String.Format(Services.dsERP.ERP_Charge.idChargeColumn.ColumnName & " IN({0})", String.Join(",", query.ToArray))
Run Code Online (Sandbox Code Playgroud)
所以我可以WHERE RMA.fiCharge IS NOT NULL在查询中附加一个。但是如何在 LINQ 中做到这一点,或者还有其他选择吗?
先感谢您。
解决方案:
问题是 DataSet 不支持 Nullable-Types,但如果您在整数列上查询任何 NULL 值,则会生成 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
Run Code Online (Sandbox Code Playgroud)
您是否尝试过将空检查添加到您的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
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,您可以尝试这样的操作:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3903 次 |
| 最近记录: |