【发布时间】:2016-09-03 18:45:38
【问题描述】:
所以我在一个网站 (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);
我知道这很愚蠢,我可能遗漏了一些明显的东西,但我就是无法让它正常工作。非常感谢您的帮助。
【问题讨论】:
-
EventDate是否包含一天中的时间?如果是这样,它可能会在不考虑第二个排序字段的情况下提供完整的排序。 -
我不明白这个问题,按 DateTime 排序(假设它实际上是 DateTime 并且包含日期和时间)将完成“按日期,然后按时间”排序
-
假设
StartTime确实包含正确的日期(存储在EventDate中的日期,您可以尝试仅按StartTime排序而不是EventDate首先。 -
我只是根据您的对象猜测,但
EventDate只是日期部分吗?StartTime怎么可能可以为空?难道你不能将这两个属性结合起来,这样你就只有一个EventStartDateTime和EventEndDateTime?不应该要求 enddatestimes 吗?如果您仅将开始和结束用作时间部分,那么如果事件在午夜过后流血会发生什么?还是多天? -
@Richard eventdate 包含完整的日期时间值,但时间方面将始终设置为 00.00.00。