我有一个ObjectQuery
:
ObjectQuery<Car> query = GetCarQuery();
比想要按相关实体Date
的属性Race
订购,有些像
query = (ObjectQuery<Car>)query.OrderBy(x=> x.Races.Date);
query.Skip((page - 1) * rows).Take(rows).ToList();
试图这样:
query = (ObjectQuery<Car>)query.OrderBy(i => i.Races.OrderBy(x=> x.Date));
query.Skip((page - 1) * rows).Take(rows).ToList(); //error here
并在执行查询时出错
DbSortClause expressions must have a type that is order comparable.
Parameter name: key
有什么想法吗?
更新
var result = (from a in query
select new
{
Car= a,
Race= a.Races.OrderBy(x => x.Date)
}).Skip((page - 1) * rows).Take(rows).ToList();
没有任何错误,但是将接缝分类不起作用。
使用Entity SQL再试一次:
query = query.OrderBy("it.Races.Date");
query = query.Skip((page - 1) * rows).Take(rows).ToList();//error here
并收到错误:
'Date' is not a member of 'Transient.collection[Race(Nullable=True,DefaultValue=)]'. To extract a property of a collection element, use a subquery to iterate over the collection. Near simple identifier, line 6, column 28.
所以我想我已经尽力了......
答案 0 :(得分:3)
您认为它应如何运作?你有汽车,每个都可以有很多比赛,所以你不能按种族数据对汽车进行分类,除非你做任何一个:
.OrderBy(x=> x.Races.Max(Date))
对于第二种解决方案,您可以尝试以下方式:
var result = (from car in query
from race in car.Races
select new
{
Car = car,
Race = race
})
.OrderBy(x => x.Race.Data)
.Skip((page - 1) * rows)
.Take(rows).ToList();