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

Yukarıdaki lambda deyimi, bazı null'lar döndürüyor, çünkü ProblemCode'un her zaman ortalamalar listesinde yer alması garanti edilmiyor.C# Lambda, bazı boş değerler döndürüyor

Bu ifadeyi nasıl yazabilirim ki, bu durumda opencall.Priority, uygulama hatası yerine "" olarak ayarlanmışsa, bunu yeniden yazabilirim?

+0

null döndürür lambda ama Linq ifadesi değildir. – Andrey

cevap

16

null'dan başka referans türünüz için yeni bir varsayılan değer belirtmeniz gerekir.

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

Yani Priority bir string mı? DefaultIfEmpty sağladığınız zaman boş olduğundan, sorgu hiçbir zaman bir istisna atamadığı için artık SingleOrDefault'a ihtiyacınız olmadığını unutmayın.

+0

Teşekkürler - "5 dakikada bir yanıtı kabul edebilirsiniz" ... – markp3rry

3

Bölünmüş it up:

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

deneyin takdirde boş olup olmadığını sorun kodu, sonra kontrol alma.

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

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

varsayarsak Öncelik dize, sen deneyebilirsiniz:

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

Boş birleştirme operatörü kullanılarak okunmasını kolaylaştırmanın bir yolu olmalı. – Chris

0

Sadece yazabilirsiniz:

opencall.Priority = 
    averages.Where(x => x.ProblemCode == opencall.ProblemCode) 
    .Select(x => x.Priority) 
    .SingleOrDefault() ?? string.Empty; 
İlgili konular