根据日期范围将对象与开始日期/结束日期匹配
问题描述:
我有一个用户的工作列表,其中包含不同的开始日期和结束日期。根据日期范围将对象与开始日期/结束日期匹配
用户有一个项目也有一个开始和结束日期。
我想在什么工作项目为范围的日期
例子匹配知道:
乔布斯:
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.Where(e => e.StartDate <= project.EndDate && e.EndDate >= project.StartDate).ToList();
做哟你只想要所有''工作'完全*在'project'范围内,或者你还想'作业''部分*在'project'范围内吗?例如'jobA'从'2000'到'2005','jobB'从'2004'到'2006','project'从'2003'到'2007'。你只想要'jobB'还是'jobA' *和*'jobB'? – Corak
随着你的逻辑现在你只会得到比'project'更大的'jobs',也就是'job'必须在'project'之前(或等于)'**'开始并且还要结束“之后“(或等于)”项目“。 – Corak
@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] –