2013-02-06 12 views
8

Das obige Lambda-Statement gibt einige Nullen zurück, da ProblemCode nicht immer in der Durchschnittsliste enthalten ist.C# Lambda gibt einige Nullwerte zurück

Wie kann ich diese Anweisung so umschreiben, dass, wenn das der Fall ist, opencall.Priority auf "" gesetzt wird, anstatt dass die Anwendung einen Fehler wirft?

+0

Es ist nicht Lambda ist die null zurückgibt, aber Linq Ausdruck. – Andrey

Antwort

16

Sie müssen einen neuen Standardwert für Ihren Referenztyp angeben, mit Ausnahme von null.

opencall.Priority = averages.Where(x => x.ProblemCode == opencall.ProblemCode) 
          .Select(x => x.Priority) 
          .DefaultIfEmpty("") 
          .Single(); 

So ist Priority ein string? Beachten Sie, dass Sie SingleOrDefault nicht mehr benötigen, da die Abfrage niemals eine Ausnahme auslösen kann, da sie leer ist, wenn Sie eine DefaultIfEmpty bereitstellen.

+0

Danke - "Sie können eine Antwort in 5 Minuten akzeptieren" ... – markp3rry

3

Split it up:

var result = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault() 
opencall.Priority = result != null ? result.Priority : string.Empty; 
0

versuchen, das Problem Code zuerst bekommen, dann überprüfen, ob es null ist.

var possiblyNullProblemCode= 
    averages.Where(
     x => x.ProblemCode == opencall.ProblemCode) 
     .SingleOrDefault(); 

openCall.Priority = 
    possiblyNullProblemCode == null ? 
     string.Empty : 
     possiblyNullProblemCode.Priority; 
0

Unter der Annahme, Priority-String ist, könnten Sie versuchen:

var average = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault() 
opencall.Priority = average == null ? "" : average.Priority; 
+0

Es sollte eine Möglichkeit geben, das Lesen mit dem Null-Koaleszenzoperator einfacher zu machen. – Chris

0

Sie können einfach schreiben:

opencall.Priority = 
    averages.Where(x => x.ProblemCode == opencall.ProblemCode) 
    .Select(x => x.Priority) 
    .SingleOrDefault() ?? string.Empty; 
Verwandte Themen