2015-05-10 73 views
2

我想返回一個狀態更新的列表,這是由插入日期按降序排序。此列表顯示在部分視圖中,因此我無法使用控制器對列表進行排序。該解決方案是創建一個服務類,包含此代碼:System.NotSupportedException當創建一個反向列表

var StatusResult = (from status in db.UserStatuses 
        orderby status.DateInserted 
        select status).Reverse().ToList(); 
return StatusResult; 

當我運行它,我得到這個錯誤:

An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

Additional information: LINQ to Entities does not recognize the method 'System.Linq.IQueryable 1[Project.Models.UserStatus] Reverse[UserStatus](System.Linq.IQueryable 1[Project.Models.UserStatus])' method, and this method cannot be translated into a store expression.

誰能幫我明白是怎麼回事,如何解決這一問題?

回答

4

EF不知道如何告訴SQL Server顛倒查詢的結果,這就是爲什麼執行時查詢失敗的原因。雖然有可能,但更好的方法是簡單地按查詢結果降序排列:

var StatusResult = (from status in db.UserStatuses 
        orderby status.DateInserted descending 
        select status).ToList(); 
return StatusResult; 
+0

非常感謝。我不知道我可以在DateInserted後面寫下「降序」 –

3

Reverse()應用於IQueryable<UserStatus>,並試圖由實體框架查詢提供程序轉換爲SQL,並且嘗試將其轉換爲SQL,並且it isn't supported

爲了解決眼前的問題,你會確保這種情況發生在內存移動到IEnumerable<UserStatus>第一:

var statusResult = (from status in db.UserStatuses 
        orderby status.DateInserted 
        select status).AsEnumerable().Reverse().ToList(); 

但是,它會更有意義,只是爲了通過,而不是下降:

var statusResult = (from status in db.UserStatuses 
        orderby status.DateInserted descending 
        select status).ToList(); 
+0

謝謝分配。我將使用降序方法。 –

+0

這將是最好的解決方案,因爲排序將由SQL數據庫而不是內存執行。 –