5

null許容列のテーブルを結合する方法は?

次のLINQクエリがあります。NULLにRMA.fiChargeすることができます。

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型から「整数」型への変換は無効です」というメッセージが表示されます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値をクエリすると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
4

2 に答える 2

3

where句にnullチェックを追加してみましたか?

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

LINQ to Datasetsを使用してこの問題を解決できますが、アドホック結合の代わりに事前定義されたDataRelationsを使用するとパフォーマンスが向上する場合があります。データの関係については、 http://msdn.microsoft.com/en-us/library/dbwcse3d.aspxを参照してください。

LINQ to Datasetsを使用している場合は、http://www.manning.com/marguerie/で無料のボーナス第14章を確認することをお勧めします

于 2011-10-19T18:20:09.533 に答える