C# 如何进行日期范围的通用查询?

C# 如何进行日期范围的通用查询?,c#,linq,datetime,C#,Linq,Datetime,我使用LINQ获取特定日期范围内的对象列表。例如,我有DateTime格式的当前日期:21.05.2016 0:00:00,我需要获取1天前(5天前、3个月前、1年前、5年前)直到现在发布的新闻。我是这样做的: List<MyObject> data = DataDownloader.myList.Where(s => s.Date.Year >= fromDate.Year &&a

我使用LINQ获取特定日期范围内的对象列表。例如,我有DateTime格式的当前日期:21.05.2016 0:00:00,我需要获取1天前(5天前、3个月前、1年前、5年前)直到现在发布的新闻。我是这样做的:

List<MyObject> data =
    DataDownloader.myList.Where(s => s.Date.Year >= fromDate.Year
                                     && s.Date.Month >= fromDate.Month
                                     && s.Date.Day >= fromDate.Day
                                     && s.Date.Year <= toDate.Year
                                     && s.Date.Month <= toDate.Month
                                     && s.Date.Day <= toDate.Day).ToList();
5天:

fromDate = toDate.AddDays(-5);
3个月:

fromDate = toDate.AddMonths(-3);
等等


但我三个月只收到两条新闻。现在是2016年4月21日0:00:00和2016年5月21日0:00:00。因此,您知道它们只不同于月份数,因为我当前的日期是2016年5月21日。我做错了什么?据我所知,我应该得到更多的消息。

你在比较一个日期的每一个元素,这不会给你正确的答案

你是说“过去3个月”(从2016年2月21日到2016年5月21日)的日期必须介于21和21之间,月份必须介于2和5之间,年份必须介于2016和2016之间

您实际上是在搜索2016年2月21日、2016年3月21日、2016年4月21日或2016年5月21日,而不是所有日期之间的日期

只需比较日期:

list.Where(x => x.Date >= fromDate && x.Date <= toDate).ToList();

list.Where(x=>x.Date>=fromDate&&x.Date您正在比较日期的每个元素,这不会给您正确的答案

你是说“过去3个月”(从2016年2月21日到2016年5月21日)的日期必须介于21和21之间,月份必须介于2和5之间,年份必须介于2016和2016之间

您实际上是在搜索2016年2月21日、2016年3月21日、2016年4月21日或2016年5月21日,而不是所有日期之间的日期

只需比较日期:

list.Where(x => x.Date >= fromDate && x.Date <= toDate).ToList();

list.Where(x=>x.Date>=fromDate&&x.Date为什么要单独查询每个组件,而不仅仅是
s.Date>=fromDate
等?为什么要单独查询每个组件,而不仅仅是
s.Date>=fromDate
等?