如何过滤具有日期的列表并仅检索 7 天内的数据

所以我有这个模型:


Student Model


public int StudentId {get; set;}

public string StudentName {get; set;}

public DateTime EnrollDate {get; set;}

我还有一个学生模型列表,类似于


List<Student> listOfStudents = new List<Student>();

在该列表中,有 100 名学生的详细信息和注册日期。


我接下来要做的是将列表排序为从最新到最旧的显示。


listOfStudents.Sort((x, y) => DateTime.Compare(y.EnrollDate, x.EnrollDate));

它正在工作。但是,我目前正在努力在从今天起 7 天内仅显示 EnrollDate。


波斯汪
浏览 192回答 2
2回答

手掌心

如何将问题分解为 2 个子问题?子问题#1仅显示从今天起 7 天内的注册日期我们只需要StudentsEnrollDate从今天起 7 天内的属性:var today = DateTime.UtcNow;sevenDaysOldList = listOfStudents.Where(x => (today - x.EnrollDate).TotalDays < 7);&nbsp;两个日期相减的结果是TimeSpan带有TotalDays属性的,我们可以用它来确定两个日期之间经过的天数。子问题#2将列表排序为从最新到最旧的显示。我们需要sevenDaysOldList按EnrollDate降序排序:sevenDaysOldList.Sort((x, y) => y.EnrollDate.CompareTo(x.EnrollDate));..这将对列表进行排序。OrderByDescending是一个很好的候选者(它返回一个新的有序列表实现IOrderedEnumerable<T>):sevenDaysOldList.OrderByDescending(x => x.EnrollDate);// and of course .OrderBy(x => x.EnrollDate) for ascending order结合 #1 和 #2您现在可以将两个子问题的解决方案合二为一。你如何做取决于你自己的判断。这就是我将如何做到的:var sevenDaysOldList = listOfStudents.Where(x => (today - x.EnrollDate).TotalDays < 7)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.OrderByDescending(x => x.EnrollDate);更新:评论中的问题如何修改/排序删除所有小于“2018 年 6 月 26 日”的列表?因此该列表将只有大于 2018 年 6 月 26 日的数据日期。任何日期在 6 月 26 日之前的数据都将被删除您可以在DateTime变量中初始化该日期,并将其与List<T>.RemoveAll(Predicate<T>), 一起使用以删除sevenDaysOldList小于该日期的项目:var filterDate = new DateTime(2018, 06, 26);sevenDaysOldList.RemoveAll(x => x.EnrollDate < filterDate);
打开App,查看更多内容
随时随地看视频慕课网APP