我正在使用将查询结果投影到自定义类型,这不是实体数据模型的一部分:
public sealed class AlgoVersionCacheItem : NotificationObject
{
public int OrderId { get; set; }
public string OrderTitle { get; set; }
public int? CurrentVersion { get; set; }
public int CachedVersion { get; set; }
public IEnumerable<int> AvailableVersions { get; set; }
}
我想AvailableVersions
按降序排序。因此,我尝试AvailableVersions
在投影中添加排序:
return someQueryable
.Select(version => new AlgoVersionCacheItem
{
OrderId = version.OrderId,
OrderTitle = version.Order.Title,
CurrentVersion = version.Order.CurrentAlgoVersionId,
CachedVersion = version.Id,
AvailableVersions = version
.Order
.AlgoVersions
.Where(v => (allowUncommittedVersions || v.Statuses.Any(s => s.AlgoVersionStatusListItemId == ModelConstants.AlgoVersionCommitted_StatusId)) && v.Id != version.Id)
.OrderByDescending(v => v.Id) // this line will cause exception
.Select(v => v.Id)
})
.Where(item => item.AvailableVersions.Any())
.OrderByDescending(item => item.OrderId)
.ToArray();
通过排序,查询的执行会抛出一个System.Data.EntityCommandCompilationException
with System.InvalidCastException
as 内部异常:
无法将“System.Data.Entity.Core.Query.InternalTrees.SortOp”类型的对象转换为“System.Data.Entity.Core.Query.InternalTrees.ProjectOp”类型的对象
没有.OrderByDescending(v => v.Id)
一切工作正常。
这是实体框架不支持的另一个功能,还是我错过了什么?
PS我知道,我可以稍后在客户端对项目进行排序,但我想知道在服务器端进行排序。