linqをデータセットに使用する場合のdbnullの発行
-
04-10-2019 - |
質問
次のLINQステートメントがあります。
Dim PSNum As Integer = 66
Dim InvSeq = (From invRecord In InvSeqDataSet.RptInvSeqDT.AsQueryable() _
Where IIf(invRecord.IsPack_NumNull(), False, invRecord.Pack_Num = PSNum) _
Select New With _
{.Inv = invRecord.Invoice_Num, .Seq = invRecord.Inv_Seq}).FirstOrDefault()
Invrecord.pack_numは、整数のタイプのフィールドです。これは、私がそれにアクセスしようとするとき、それがdbnullの場合、私はstringlytypedexceptionを取得することを意味します。上記のコードはこの例外をスローします。ただし、「invrecord.pack_num = psnum」を削除し、その場所で「true」のようなものを置くと、コードは正常に動作します。
だから私の質問は、そのinvrecord.ispack_numnull()が実際にdbnullである場合にfalseを返すのはなぜですか?代わりに条件として何を使用できますか?私はしばらくの間、頭を壁に打ち負かしていましたが、この問題の解決策が見つかりません。
解決
vb.netで、 IIf()
それは言語声明ではなく関数であるため、その議論のすべてを評価します。それで inv.Record.Pack_Num = PSNum
常に評価されます。
使用できます If()
それ以外の IIf()
(同じ構文)短絡評価を使用するため、すべてが予想どおりに機能します。
サイドノードでは、注意してください And
と Or
同じ動作を持っています。使用する AndAlso
と OrElse
代わりに、短絡評価が必要な場合。
所属していません StackOverflow