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

上面的 lambda 语句返回一些空值,因为 ProblemCode 并不总是保证在平均值列表中。

如何重写此语句,以便在这种情况下将 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 possiblyNullProblemCode= 
    averages.Where(
        x => x.ProblemCode == opencall.ProblemCode)
        .SingleOrDefault();

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

假设优先级是字符串,您可以尝试:

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

你可以简单地写:

opencall.Priority = 
    averages.Where(x => x.ProblemCode == opencall.ProblemCode)
    .Select(x => x.Priority)
    .SingleOrDefault() ?? string.Empty;
于 2013-02-06T16:56:13.647 回答