2012-06-14 192 views
3

我有这些对象:按子集合的子属性对LINQ查询进行排序?

public class Class 
{ 
    public Guid Id {get;set;} 
    public string Name {get;set;} 
    public virtual ICollection<Schedule> Schedules{get;set;} 
} 

public class Schedule 
{ 
    public Guid Id {get;set;} 
    public virtual DayOfTheWeekId {get;set;} 
    public virtual DayOfTheWeek {get;set;} 
    public DateTime StartTime {get;set;} 
    public DateTime EndTime {get;set;} 
} 

我当前的查询看起来是这样,但我得到这个异常:至少一个对象必须实现IComparable。

Repository 
.Get(c => c.Schedules.Any(s => s.DayOfTheWeekTypeId == dayOfTheWeekId)) 
.OrderBy(e => e.Schedules.OrderBy(s => s.StartDateTime)).ToList() 

当我设置的时候,我总是使用相同的一天,因为我需要显示在一周的某几天班。这就是DayOfTheWeek对象发挥作用的地方。这是我如何设置时间:

var schedule = new Schedule{ 
          StartDateTime = new DateTime(1999,1,1) + new TimeSpan(9, 15, 0), 
          EndDateTime = new DateTime(1999,1,1) + new TimeSpan(9, 15, 0), 
          DayOfTheWeekTypeId = 1 
          } 

更新:

想到这里,我想我可能要分组......

+0

Linq的“Group By”示例位于:http://code.msdn.microsoft.com/LINQ-to-DataSets -Grouping-c62703ea –

回答

6

你试图通过订购序列号。那有什么意思?

这将更有意义的命令 - 说 - 在时间表的最早事件:

.OrderBy(e => e.Schedules.Min(s => s.StartDateTime)) 

我不知道会工作,但是否至少更有意义。 (它可以在LINQ to Objects中工作,但我不知道EF如何)。

+0

这正是我所需要的,但我只是意识到,无论一周的哪一天,我都会收回所有的时间表。我将不得不修改我的查询,所以我只是拉回给定日期的时间表。 – DDiVita

+1

它也适用于LINQ to Entities。 – Slauma

相关问题