opencall.Priority =
averages.Where(x => x.ProblemCode == opencall.ProblemCode)
.SingleOrDefault().Priority;
上述lambda语句会返回一些null值,因为ProblemCode不总是保证在平均数列表中存在。
如何改写该语句以便在这种情况下将opencall.Priority设置为空字符串,而不是应用程序抛出错误?
你需要为你的引用类型提供一个新的默认值,而不是null
。
opencall.Priority = averages.Where(x => x.ProblemCode == opencall.ProblemCode)
.Select(x => x.Priority)
.DefaultIfEmpty("")
.Single();
所以Priority
是一个string
吗?请注意,您不再需要SingleOrDefault
,因为查询永远不会抛出异常,因为它将返回您提供的回退值。
拆分它:
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;