在Date之后排序列表然后是时间

时间:2016-06-01 12:18:48

标签: c# linq sorting datetime

所以我正在开设一个网站(MVC)来处理节日期间乐队的日程安排条目,我需要按逻辑顺序提交预订,当我尝试订购它时,我遇到了一些意想不到的困难。我的目标是先按日期和时间先订购它们。

我显然已经阅读了所有类似的问题,但我似乎没有解决问题。

这是我的模型(在这种情况下重要的部分):

public int ScheduleEntryId { get; set; }
public int ScheduleId { get; set; }
public int? BandId { get; set; }
public int? MovieId { get; set; }
public int? TechnicianId { get; set; }
public DateTime? StartTime { get; set; }
public DateTime? EndTime { get; set; }
public DateTime EventDate { get; set; }

我试图获取特定乐队的条目的排序列表。所以这就是我现在所拥有的:

List<ScheduleEntry> scheduleEntries =
    db.ScheduleEntries.Where(x => x.BandId == band.BandId)
        .OrderBy(x => x.EventDate)
        .ThenBy(z => z.StartTime.Value).ToList();

这会在日期之后对条目进行排序,但不会在时间之后对其进行排序。

我还尝试分离linq和排序,以便我可以使用.TimeOfDay,因为linq不支持该方法。这就是我试过的:

var scheduleEntries = db.ScheduleEntries.Where(x => x.BandId == band.BandId).ToList();
scheduleEntries.OrderByDescending(z => z.EventDate.Date).ThenBy(z=> z.StartTime.Value.TimeOfDay);

我知道这很傻,我可能会遗漏一些明显的东西,但我不能让它正常工作。非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

尝试

List<ScheduleEntry> scheduleEntries = db.ScheduleEntries
  .Where(x => x.BandId == band.BandId)
  .OrderBy(x => x.EventDate)
  .ThenBy(z => z.StartTime)
  .ToList();

按照@ IvanStoev在评论中的建议编辑