C# Lambda返回了一些空值

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

上述lambda语句会返回一些null值,因为ProblemCode不总是保证在平均数列表中存在。
如何改写该语句以便在这种情况下将opencall.Priority设置为空字符串,而不是应用程序抛出错误?

不是 lambda 返回 null,而是 Linq 表达式。 - Andrey
5个回答

17

你需要为你的引用类型提供一个新的默认值,而不是null

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

所以Priority是一个string吗?请注意,您不再需要SingleOrDefault,因为查询永远不会抛出异常,因为它将返回您提供的回退值。


3

拆分它:

 var result = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault()
 opencall.Priority = result != null ? result.Priority : string.Empty;

1

先尝试获取问题代码,然后检查它是否为空。

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

openCall.Priority = 
    possiblyNullProblemCode == null ? 
        string.Empty : 
        possiblyNullProblemCode.Priority;

0
假设Priority是字符串,你可以尝试以下代码:
var average = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault()
opencall.Priority = average == null ? "" : average.Priority;

应该有一种方法可以使用空值合并运算符使其更易于阅读。 - Chris

0

你可以简单地写:

opencall.Priority = 
    averages.Where(x => x.ProblemCode == opencall.ProblemCode)
    .Select(x => x.Priority)
    .SingleOrDefault() ?? string.Empty;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接