2016-11-23 161 views
1

我有一個用戶的工作列表,其中包含不同的開始日期和結束日期。根據日期範圍將對象與開始日期/結束日期匹配

用戶有一個項目也有一個開始和結束日期。

我想在什麼工作項目爲範圍的日期

例子匹配知道:

喬布斯:

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(); 
+0

做喲你只想要所有''工作'完全*在'project'範圍內,或者你還想'作業''部分*在'project'範圍內嗎?例如'jobA'從'2000'到'2005','jobB'從'2004'到'2006','project'從'2003'到'2007'。你只想要'jobB'還是'jobA' *和*'jobB'? – Corak

+0

隨着你的邏輯現在你只會得到比'project'更大的'jobs',也就是'job'必須在'project'之前(或等於)'**'開始並且還要結束「之後「(或等於)」項目「。 – Corak

+0

@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] –

回答

3

你的邏輯是有點瑕疵,您實際上並不檢查日期是否相交,這將解決問題並給你正確的結果:

jobs.Where(e => e.StartDate <= project.EndDate && e.EndDate >= project.StartDate).ToList(); 
相關問題