【问题标题】:Match objects with Start Date / End Date based on a range of Date根据日期范围将对象与开始日期/结束日期匹配
【发布时间】:2016-11-23 09:59:24
【问题描述】:

我有一个用户的工作列表,具有不同的开始日期和结束日期。

用户的项目也有开始和结束日期。

我想知道项目匹配的工作范围日期

示例:

工作:

1.  [ 1.2.1999 ] - [ 3.4.2000 ]
2.  [ 4.4.2000 ] - [ 1.1.2004 ]
3.  [ 2.1.2004 ] - [ 6.8.2004 ]
4.  [ 7.8.2004 ] - [ 9.10.2005 ]
5.  [ 10.10.2010 ] - [ 12.12.2010 ]
6.  [ 1.1.2014 ] - [ 1.1.2016 ]
7   [ 2.1.2016 ] -  [ 10.10.2016 ]

项目:

[ 10.10.2004 ] - [ 10.10.2014 ]

结果:

职位:4,5,6

代码:

Job {
    public DateTime StartDate{ get;set;}
    public DateTime EndDate {get;set;}
}

var jobs = new List<Job>();

// Will not work
jobs
.Where(e => e.StartDate <= project.StartDate &&
      e.EndDate >= project.EndDate)
.ToList(); 

【问题讨论】:

  • 您是否只希望所有jobs 完全project 的范围内,或者您还希望jobs 部分project 的范围内?例如,jobA 是从 20002005jobB 是从 20042006project 是从 20032007。你只想要jobB 还是两者都想要jobA jobB
  • 按照你的逻辑,你只会得到比project“大”的jobs,即job必须在project之前“开始”(或等于)并且也结束“之后”(或等于)project
  • @Corak 部分和完整。对于开始/结束的项目:[10.10.2004] - [10.10.2014],我将匹配 [7.8.2004] - [9.10.2005],[10.10.2010] - [12.12.2010],[1.1.2014 ] - [ 1.1.2016 ]

标签: c# .net linq list datetime


【解决方案1】:

您的逻辑有点缺陷,您实际上并没有检查日期是否相交,这将解决问题并为您提供正确的结果:

jobs.Where(e => e.StartDate <= project.EndDate && e.EndDate >= project.StartDate).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2021-07-21
    • 2019-07-06
    相关资源
    最近更新 更多