opencall.Priority =
averages.Where(x => x.ProblemCode == opencall.ProblemCode)
.SingleOrDefault().Priority;
上面的 lambda 语句返回一些空值,因为 ProblemCode 并不总是保证在平均值列表中。
如何重写此语句,以便在这种情况下将 opencall.Priority 设置为 "" 而不是应用程序抛出错误?
您必须为您的引用类型提供一个新的默认值,而不是null
.
opencall.Priority = averages.Where(x => x.ProblemCode == opencall.ProblemCode)
.Select(x => x.Priority)
.DefaultIfEmpty("")
.Single();
Priority
一个string
? _ 请注意,您不再需要SingleOrDefault
,因为查询永远不会抛出异常,因为当您提供DefaultIfEmpty
.
拆分它:
var result = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault()
opencall.Priority = result != null ? result.Priority : string.Empty;
尝试先获取问题代码,然后检查它是否为空。
var possiblyNullProblemCode=
averages.Where(
x => x.ProblemCode == opencall.ProblemCode)
.SingleOrDefault();
openCall.Priority =
possiblyNullProblemCode == null ?
string.Empty :
possiblyNullProblemCode.Priority;
假设优先级是字符串,您可以尝试:
var average = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault()
opencall.Priority = average == null ? "" : average.Priority;
你可以简单地写:
opencall.Priority =
averages.Where(x => x.ProblemCode == opencall.ProblemCode)
.Select(x => x.Priority)
.SingleOrDefault() ?? string.Empty;