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

ProblemCodeは常に平均リストにあるとは限らないため、上記のラムダステートメントではNULLが返されます。C#ラムダはいくつかのヌル値を返します

この文を書き直すと、アプリケーションがエラーをスローするのではなく、opencall.Priorityが ""に設定されます。

+0

それはnullを返しますラムダが、LINQの式ではありません。 – Andrey

答えて

16

null以外の参照タイプに新しいデフォルト値を指定する必要があります。

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

のでPrioritystringありますか? DefaultIfEmptyを指定すると空であるため、クエリーで例外が発生することはありませんので、SingleOrDefaultはもう必要ありません。

+0

ありがとうございました - "あなたは5分で答えを受け入れることができます" ... – markp3rry

3

スプリット、それをアップ:

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

は、それがnullだかどうかを確認し、その後、最初の問題のコードを取得してください。

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

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

と仮定すると、優先順位が文字列である、あなたが試みることができる:

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

ヌル合体演算子を使って読むのをより簡単にする方法があるはずです。 – Chris

0

あなたは、単に書くことができます。

opencall.Priority = 
    averages.Where(x => x.ProblemCode == opencall.ProblemCode) 
    .Select(x => x.Priority) 
    .SingleOrDefault() ?? string.Empty; 
関連する問題