2

次のlinqでArgumentNullException"値をnullにすることはできません。パラメーター名:inner"が発生し続けます。

var dataSource = (from v in vouchers
                  join payAdj in paymentAdjustments on v.VoId equals payAdj.VoId into pTemp
                  from p in pTemp.DefaultIfEmpty()
                  select new
                  {
                    VoId = v.VoId,
                    OpId = v.OpId,
                    PaValue = p.PaValue
                  });

バウチャーとpaymentAdjustmentsはどちらもエンティティのリストです。

私はこれに関する多くの投稿を読みました、そして私が試みるすべては私に同じ(または同様の)エラーを与え続けます。

  • PaValueをnull許容の10進数にキャストします。つまり、PaValue =(decimal?)p.PaValue

  • PaValueにアクセスする前にpのnullをテストします。つまり、PaValue = p!= null?p.PaValue :( 10進数)0

  • DefaultIfEmptyの代わりにSingleOrDefault(1つだけである必要があります)を使用する

  • 結合の代わりにネストされた選択を実行する...つまりPaValue=(paymentAdjustmentsのpからp.VoId == v.VoId select p.PaValue).DefaultIfEmpty()

私はc#2010Expressと.Net4を使用しています。

他の提案をいただければ幸いです。

ありがとうマーリン

4

2 に答える 2

2

これが古いことは知っていますが、答えを探している人にとっては、結合している 2 つのオブジェクトのうちの 1 つが null です。最初にこれを行います。

if (バウチャー != null && payAdjustments != null) ...

于 2013-02-22T18:24:31.640 に答える
1
var query = from case in dbEntity.Cases
            join Comm in dbEntity.Comms on case.log_id equals comm.CaseId into collection
            from subCase in collection.DefaultIfEmpty()
            select new { Case=case,Status= (subCase==null?null:subcase.Status };
于 2013-04-16T11:20:12.050 に答える