C#并非所有代码路径都返回有效类型为func的lambda表达式

时间:2015-09-03 09:23:07

标签: c# lambda

首先我尝试了这个,我的代码:

timeReports = timeReports.OrderByDescending(x => x.Date)
                  .ThenByDescending(x => x.TimeReportDatas.First().StartHour)
                  .ToList();

但是在我的项目中,我的所有项目都没有TimeReportDatas所以它因为不包含元素而崩溃了。

所以我把代码更改为:

timeReports = timeReports.OrderByDescending(x => x.Date).ThenByDescending(x =>
{
    TimeReportData firstOrDefault = x.TimeReportDatas.FirstOrDefault();
    if (firstOrDefault != null)
        return firstOrDefault.StartHour;
}).ToList();

但是我留下了以下错误:

  

并非所有代码路径都返回type的lambda表达式中的值   '功能'

2 个答案:

答案 0 :(得分:3)

在这里,您需要从所有路径中返回一些东西。

timeReports = timeReports.OrderByDescending(x => x.Date).ThenByDescending(x =>
{
    var firstOrDefault = x.TimeReportDatas.FirstOrDefault();
    if (firstOrDefault != null)
    {
        return firstOrDefault.StartHour;
    }
    else
    {
        return 0;
    }
}).ToList();

或者更简单的方式:

timeReports = timeReports.OrderByDescending(x => x.Date)
                         .ThenByDescending(x => (x.TimeReportDatas.FirstOrDefault() != null) ? x.TimeReportDatas.First().StartHour : 0)
                         .ToList();

答案 1 :(得分:1)

timeReports = timeReports.OrderByDescending(x => x.Date).ThenByDescending(x =>
{
    TimeReportData firstOrDefault = x.TimeReportDatas.FirstOrDefault();
    if (firstOrDefault != null)
        return firstOrDefault.StartHour;
    return 0;
}).ToList();

如果firstOrDefault为null,则返回“0”或带有标准数据的新元素。或者使用Where(...)表示lambda并阻止“If” - 不需要。