【问题标题】:C# Lambda returns some null valuesC# Lambda 返回一些空值
【发布时间】:2013-02-06 15:59:35
【问题描述】:
opencall.Priority = 
averages.Where(x => x.ProblemCode == opencall.ProblemCode)
.SingleOrDefault().Priority;

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

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

【问题讨论】:

  • 返回null的不是lambda,而是Linq表达式。

标签: c# .net linq lambda


【解决方案1】:

您必须为您的引用类型提供一个新的默认值,而不是 null

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

所以Prioritystring?请注意,您不再需要SingleOrDefault,因为查询永远不会抛出异常,因为当您提供DefaultIfEmpty 时它是空的。

【讨论】:

    【解决方案2】:

    拆分:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        假设优先级是字符串,你可以试试:

        var average = averages.Where(x => x.ProblemCode == opencall.ProblemCode).SingleOrDefault()
        opencall.Priority = average == null ? "" : average.Priority;
        

        【讨论】:

        • 应该有一种方法可以使用空合并运算符使其更易于阅读。
        【解决方案5】:

        你可以简单地写:

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

        【讨论】:

          猜你喜欢
          • 2018-05-05
          • 2018-12-10
          • 1970-01-01
          • 1970-01-01
          • 2012-09-20
          • 1970-01-01
          • 2021-08-22
          • 2023-03-08
          • 1970-01-01
          相关资源
          最近更新 更多