C#Lambda返回一些空值

时间:2013-02-06 15:59:36

标签: c# .net linq lambda

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

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

如何重写此语句,以便在这种情况下将opencall.Priority设置为“”而不是应用程序抛出错误?

5 个答案:

答案 0 :(得分:16)

您必须为参考类型提供新的默认值,而不是null

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

所以Prioritystring?请注意,您不再需要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;