创建反向列表时出现System.NotSupportedException

时间:2015-05-10 20:13:06

标签: c# linq entity-framework

我正在尝试按降序返回按插入日期排序的状态更新列表。此列表显示在部分视图中,因此我无法使用控制器对列表进行排序。解决方案是创建一个包含以下代码的Service类:

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

当我运行它时,我收到此错误:

  

EntityFramework.SqlServer.dll中发生了'System.NotSupportedException'类型的异常,但未在用户代码中处理

     

其他信息:LINQ to Entities无法识别方法'System.Linq.IQueryable 1[Project.Models.UserStatus] Reverse[UserStatus](System.Linq.IQueryable 1 [Project.Models.UserStatus])'方法,并且此方法无法转换为商店表达式。

任何人都可以帮助我了解正在发生的事情以及如何解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

EF并不知道如何告诉SQL Server反转查询结果,这就是为什么查询在执行时失败的原因。虽然有可能,但更好的方法是简单地要求按降序排序查询结果:

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

答案 1 :(得分:3)

Reverse()已应用于IQueryable<UserStatus>,并尝试由实体框架查询提供程序转换为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();