8
opencall.Priority = 
averages.Where(x => x.ProblemCode == opencall.ProblemCode)
.SingleOrDefault().Priority;

上記のラムダステートメントは、ProblemCodeが常に平均リストに含まれるとは限らないため、いくつかのnullを返します。

このステートメントを書き直して、その場合、アプリケーションがエラーをスローするのではなく、opencall.Priorityが ""に設定されるようにするにはどうすればよいですか?

4

5 に答える 5

16

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

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

そうPriorityですstringか?SingleOrDefaultを提供すると空になるため、クエリが例外をスローすることはありませんDefaultIfEmpty

于 2013-02-06T16:02:51.923 に答える
3

それを分割します:

 var result = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault()
 opencall.Priority = result != null ? result.Priority : string.Empty;
于 2013-02-06T16:02:54.413 に答える
0

優先度が文字列であると仮定すると、次のことを試すことができます。

var average = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault()
opencall.Priority = average == null ? "" : average.Priority;
于 2013-02-06T16:13:09.030 に答える
0

最初に問題コードを取得してから、null かどうかを確認してください。

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

openCall.Priority = 
    possiblyNullProblemCode == null ? 
        string.Empty : 
        possiblyNullProblemCode.Priority;
于 2013-02-06T16:10:11.813 に答える