如何比较日期时间对象中的月和日

Ste*_*hen 6 c# datetime entity-framework

在我的C#程序中,我遇到了一个障碍,我有一个存储日期范围的表(列是日期范围ID(int),开始日期(DateTime)和结束日期(DateTime).我想查询表并返回只属于特定日期范围的行.我不能使用datetime.date,因为它包含年份.

例如,我想查询表并获取介于01-01和5-31之间的所有日期范围.

我已经尝试使用以下lambda来查询表,但我的结果集是空的.

List<DateRanges> tempDateRangeList = dataContext
                                     .DateRanges
                                     .Where(r=>r.BeginDate.Month <= startDate.Month 
                                               && r.EndDate.Month >= finishDate.Month)
                                     .ToList();

tempDateRangeList = tempDateRangeList.Where(r=>r.BeginDate.Day <= startDate.Day 
                                               && r.EndDate.Day >= finishDate.Day)
                                     .ToList();
Run Code Online (Sandbox Code Playgroud)

有没有人对我如何做到这一点有任何建议?

编辑:

BeginDate和EndDate的示例将是如下列表:

BeginDate 2016年1月1日,2016年5月25日,2016年11月9日

EndDates 2016年5月24日,2016年9月9日,2016年12月31日

过滤日期为:startDate = 12/8 finishDate = 12/12

预期结果:9/11开始日期结束日期12/31

Zor*_*vat 3

您的情况有两种情况 - 月份等于边界月份,在这种情况下您必须测试天数,以及不同的月份,在这种情况下您忽略日期。因此查询:

List<DateRanges> tempDateRangeList = 
    dataContext.DateRanges.Where(r =>
        ((r.BeginDate.Month < startDate.Month) || 
         (r.BeginDate.Month == startDate.Month && r.BeginDate.Day <= startDate.Day)) &&
        ((r.EndDate.Month > finishDate.Month) ||
         (r.EndDate.Month == finishDate.Month) && r.EndDate.Day >= finsihDate.Day))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

情况很丑陋,很难遵循,但涵盖了所有情况。此查询返回定义完全属于边界日期的日期范围的所有记录。

如果您希望查找与过滤范围(完全或部分)重叠的记录,则查询将是:

List<DateRanges> tempDateRangeList = 
    dataContext.DateRanges.Where(r =>
        ((r.BeginDate.Month < endDate.Month) || 
         (r.BeginDate.Month == endDate.Month && r.BeginDate.Day <= endDate.Day)) &&
        ((r.EndDate.Month > startDate.Month) ||
         (r.EndDate.Month == startDate.Month) && r.EndDate.Day >= startDate.Day))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

这种情况可能会改变你的想法,但效果很好。