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