2012-10-24 12 views
6

Poszukuję rozwiązania problemu polegającego na tym, że metoda rozszerzenia DefaultIfEmpty() nie zbiera wartości pustych, gdy są używane w łączeniu zewnętrznym LINQ.LINQ Wyjątek NullReferenceException na DefaultIfEmpty

kod w następujący sposób:

  var SummaryLossesWithNets = (from g in SummaryLosses 
            join n in nets 
            on g.Year equals n.Year into grouping 
            from x in grouping.DefaultIfEmpty() 
            select new 
             { 
              Year = g.Year, 
              OEPGR = g.OccuranceLoss, 
              AEPGR = g.AggregateLoss, 
              OEPNET = ((x.OEPRecovery == null) ? 0 : x.OEPRecovery), 
              AEPNET = ((x.AEPRecovery == null) ? 0 : x.AEPRecovery), 
             }); 

na liście SummaryLosses istnieje wiele lat warto danych Pragnę przyłączyć się do tabeli „sieci”, które zawiera sub-część lata. Wyjątek jest wywoływany, gdy x jest wartością pustą, zakładam, ponieważ lata w zestawieniach podsumowujących, które nie zostały dopasowane przez lata w sieciach, tworzą wartości puste na liście grupowania.

W jaki sposób powinieneś sprawdzić tutaj wartość zerową? Jak widać, próbowałem sprawdzić zerowość we właściwościach x, ale ponieważ x ma wartość null, to nie działa.

poważaniem Richarda

Odpowiedz

7

Wystarczy sprawdzić, czy x jest null zamiast:

OEPNET = x == null ? 0 : x.OEPRecovery, 
AEPNET = x == null ? 0 : x.AEPRecovery 

Lub jeśli x.OEPRecovery i x.AEPRecovery są właściwości zerowalne też zastosowanie:

OEPNET = x == null ? 0 : (x.OEPRecovery ?? 0), 
AEPNET = x == null ? 0 : (x.AEPRecovery ?? 0) 
+0

Wielkie dzięki, nie wiem, dlaczego to nie przyszło mi do głowy. Dzięki –

0

Jeśli masz wiele dołącz oświadczenia

check all joined tables i upewnić się, że foreign key you are using (porównując lub powiedzmy Interesują) is not null

Powiązane problemy