为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
波斯汪 2021-08-29 17:45:50
所以我有这个模型:Student Modelpublic 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。
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

如何将问题分解为 2 个子问题?


子问题#1

仅显示从今天起 7 天内的注册日期


我们只需要StudentsEnrollDate从今天起 7 天内的属性:


var today = DateTime.UtcNow;

sevenDaysOldList = listOfStudents.Where(x => (today - x.EnrollDate).TotalDays < 7); 

两个日期相减的结果是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)

                                     .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);


查看完整回答
反对 回复 2021-08-29
  • 2 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信