实体框架ObjectQuery按日期在多对多关系上的顺序 [英] Entity Framework ObjectQuery order by date on many to many relation
问题描述
我有这样的 ObjectQuery
:
ObjectQuery< Car>查询= GetCarQuery();
我想按相关实体 Race
上的属性 Date
进行排序,就像
query =(ObjectQuery< Car>)query.OrderBy(x => x.Races.Date);query.Skip((第1页)*行).Take(行).ToList();
正试图那样走:
query =(ObjectQuery< Car>)query.OrderBy(i => i.Races.OrderBy(x => x.Date));query.Skip((第1页)*行).Take(行).ToList();//这里出错
执行查询时出现错误
DbSortClause表达式的类型必须与顺序可比.参数名称:键
有什么想法吗?
更新:
var结果=(来自查询中的a选择新的{汽车= a,Race = a.Races.OrderBy(x => x.Date)}).Skip((第1页)*行).Take(行).ToList();
没有出现任何错误,但排序接缝不起作用.
再尝试一次,但使用实体SQL:
query = query.OrderBy("it.Races.Date");query = query.Skip((第1页)*行).Take(行).ToList();//错误在这里
并出现错误:
'Date'不是'Transient.collection [Race(Nullable = True,DefaultValue =)]'的成员.要提取集合元素的属性,请使用子查询来遍历集合.在简单标识符附近,第6行,第28列.
所以我想我已经尽力了...
您认为它应该如何工作?您有汽车,而且每个汽车都可以有很多比赛,因此除非您执行以下任何一项操作,否则您不能通过种族数据对汽车进行排序:
- 按种族对赛车进行排序-例如
.OrderBy(x => x.Races.Max(Date))
- 将结果汇总为每场比赛(赛车重复)的新记录
对于第二种解决方案,您可以尝试类似的操作:
var结果=(来自查询中的汽车来自赛车比赛.选择新的{汽车=汽车,种族=种族}).OrderBy(x => x.Race.Data).Skip((第1页)*行).Take(行).ToList();
I have an ObjectQuery
like that:
ObjectQuery<Car> query = GetCarQuery();
than i want to order by property Date
on related entity Race
, somehting like
query = (ObjectQuery<Car>)query.OrderBy(x=> x.Races.Date);
query.Skip((page - 1) * rows).Take(rows).ToList();
was trying to go like that:
query = (ObjectQuery<Car>)query.OrderBy(i => i.Races.OrderBy(x=> x.Date));
query.Skip((page - 1) * rows).Take(rows).ToList(); //error here
and got an error when query executed
DbSortClause expressions must have a type that is order comparable.
Parameter name: key
Any ideas?
UPDATE:
After reading that http://blogs.msdn.com/b/alexj/archive/2009/02/25/tip-1-sorting-relationships-in-entity-framework.aspx i go like this:
var result = (from a in query
select new
{
Car= a,
Race= a.Races.OrderBy(x => x.Date)
}).Skip((page - 1) * rows).Take(rows).ToList();
Didn't get any errors but sorting seams to be not working.
One more try but with Entity SQL:
query = query.OrderBy("it.Races.Date");
query = query.Skip((page - 1) * rows).Take(rows).ToList();//error here
and getting error:
'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.
So i think I've tried everything i could...
And how do you expect it should work? You have cars and each of them can have many races so you cannot sort cars by race's data unless you do either:
- Sort cars with some aggregation of races - for example
.OrderBy(x=> x.Races.Max(Date))
- Flatten the result to have new record for each race (duplication of car)
For second solution you can try something like:
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();
这篇关于实体框架ObjectQuery按日期在多对多关系上的顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!