2013-02-06 11 views
8
opencall.Priority = 
averages.Where(x => x.ProblemCode == opencall.ProblemCode) 
.SingleOrDefault().Priority; 

Powyższa instrukcja lambda zwraca niektóre wartości null, ponieważ nie zawsze gwarantowana jest pozycja na liście średnich.C# Lambda zwraca niektóre wartości null

Jak mogę przepisać to oświadczenie, aby w takim przypadku opencall.Priority ustawiono na "" zamiast aplikacji, która zgłasza błąd?

+0

Nie jest lambda, która zwraca null, ale wyrażenie LINQ. – Andrey

Odpowiedz

16

Należy podać nową domyślną wartość dla typu referencyjnego, inną niż null.

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

Więc Priority jest string? Zauważ, że nie potrzebujesz już SingleOrDefault, ponieważ zapytanie nigdy nie może wyrzucić wyjątku, ponieważ jest puste, gdy podasz DefaultIfEmpty.

+0

Dzięki - "możesz przyjąć odpowiedź w 5 minut" ... – markp3rry

3

podzielić go:

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

próby uzyskania kodu Problem pierwszy, a następnie sprawdzić, czy jest to wartość null.

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

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

Zakładając Priorytet jest ciągiem znaków, można spróbować:

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

Powinien istnieć sposób na ułatwienie czytania za pomocą operatora koalescencyjnego zerowego. – Chris

0

można po prostu napisać:

opencall.Priority = 
    averages.Where(x => x.ProblemCode == opencall.ProblemCode) 
    .Select(x => x.Priority) 
    .SingleOrDefault() ?? string.Empty; 
Powiązane problemy