2015-09-03 42 views
1

首先我沒有嘗試這個的lambda表達式,我的代碼:C#並非所有的代碼路徑返回一個有效的類型FUNC

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(); 

但比我留下了以下錯誤:

Not all code paths return a value in lambda expression of type 'Func'

+1

如果(!firstOrDefault = NULL)......別的嗎? –

+0

當firstOrDefault'爲null時,你的lambda返回什麼? – Dirk

回答

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
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」 - 不需要。

+0

擁有這樣的結果'不能轉換爲空'int',因爲它是一個非... –

相關問題