实体框架ObjectQuery按日期在多对多关系上的顺序 [英] Entity Framework ObjectQuery order by date on many to many relation

查看:72
本文介绍了实体框架ObjectQuery按日期在多对多关系上的顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的 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表达式的类型必须与顺序可比.参数名称:键 

有什么想法吗?

更新:

在阅读 http://blogs.msdn.com/b/alexj/archive/2009/02/25/tip-1-sorting-relationships-in-entity-framework.aspx 我喜欢这样:

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆