2012-06-14 196 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

相關問題