2012-10-24 16 views
6

Ich bin auf der Suche nach einer Lösung für das Problem, die DefaultIfEmpty() Erweiterungsmethode nicht NULL Werte bei der Verwendung in einem LINQ Outer Join abholen.LINQ NullReferenceException auf DefaultIfEmpty

-Code wie folgt:

  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), 
             }); 

in der Liste SummaryLosses gibt es viele Jahre im Wert von Daten Ich möchte den Tisch ‚Netze‘ verbinden, die einen Unterabschnitt der Jahre enthält. Die Ausnahme wird ausgelöst, wenn x ein Nullwert ist. Ich gehe davon aus, dass die Jahre in SummaryLosses, die nicht mit Jahren in Netzen übereinstimmen, Nullwerte in der Gruppierungsliste erzeugen.

Wie soll man hier nach dem Nullwert suchen? Wie Sie sehen können, habe ich versucht, die Eigenschaften von x auf Null zu prüfen, aber da x null ist, funktioniert das nicht.

Mit freundlichen Grüßen Richard

Antwort

7

einfach überprüfen, ob x null statt:

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

Oder wenn x.OEPRecovery und x.AEPRecovery Nullable-Objekte sind zu verwenden:

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

Großen Dank, nicht sicher, warum dies nicht zu mir kommen. Vielen Dank –

0

Wenn Sie viele haben Join Anweisungen

check all joined tables und sicherzustellen, dass die foreign key you are using (in Vergleich oder Interessierte können sagen, in) is not null