我正在尝试按降序返回按插入日期排序的状态更新列表。此列表显示在部分视图中,因此我无法使用控制器对列表进行排序。解决方案是创建一个包含以下代码的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])'方法,并且此方法无法转换为商店表达式。
任何人都可以帮助我了解正在发生的事情以及如何解决这个问题吗?
答案 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();