2013-07-07 6 views
1

나는 청구 된 사람의 시작일과 종료일을 나타내는 개체 목록을 가지고 있습니다.시작/종료 날짜가있는 개체 목록에서 틈새 찾기

public class ProjectResourceCostDto 
    { 
     public int Id { get; set; } 
     public int ProjectResourceId { get; set; } 
     public DateTime StartDate { get; set; } 
     public DateTime? EndDate { get; set; } 
     public decimal Cost { get; set; } 
     public bool Deleted { get; set; } 
    } 

프로젝트 시작일과 종료일이 있습니다. 그래서 내가해야 할 일은 'Gaps'리스트 인 <>을 반환하는 것입니다.

프로젝트 시작 날짜가 "01-JAN-2013"이고 종료 날짜가 "31-DEC-2013"인 경우, 내 입력 사항입니다.

목록을 거쳐 지불금이없는 시작/종료 날짜 목록을 출력해야합니다.

그래서, 객체 내 목록이있는 경우 :

시작 = 05-JAN-2013 끝 = 01 간섭 단층 2013

시작 = 15 간섭 단층 2013 끝 = 25 DEC- 2013

다음, 나는 반환해야 것 : 01-JAN-2013 04-JAN-2013

02 간섭 단층 2013 14 간섭 단층 2013

,

26 12 월 2013 (31) 12 월 2013

사람들은 내가 속도를 확인할 수없는 기간이다.

C# 코드로 작성해야합니다. 엔티티 프레임 워크를 사용하고 있습니다. 다른 옵션은 SQL Server에서 뷰를 사용하여 만들 수 있습니다 ... 모든 날짜가있는 캘린더 테이블이 있습니다.하지만 누군가가 루틴을 갖고 있다면 첫 번째 상금이됩니다. 이 기간을 해결하기 위해 코드에서 사용할 수 있습니다.

+2

이 라이브러리를보십시오 : http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET – sasfrog

답변

0

입력 목록을 날짜 (예 : 시작 날짜)로 정렬 한 다음 대상 조건이 충족 될 때마다 (예 : 비용 = 0) 새 목록에 날짜를 추가하여 반복 할 수 있습니다. 여기 gapsList에 관련된 모든 날짜를 작성하는 샘플 코드를 가지고 :

List<ProjectResourceCostDto> testList = new List<ProjectResourceCostDto>(); 
testList.Add(new ProjectResourceCostDto{Id = 1, ProjectResourceId = 1, StartDate = new DateTime(2001,2,1), EndDate = new DateTime(2002, 1,1), Cost = 1111, Deleted = false}); 
testList.Add(new ProjectResourceCostDto{Id = 2, ProjectResourceId = 2, StartDate = new DateTime(2003,1,1), EndDate = new DateTime(2004, 1,1), Cost = 0, Deleted = false}); 
testList.Add(new ProjectResourceCostDto { Id = 3, ProjectResourceId = 3, StartDate = new DateTime(2005, 1, 1), EndDate = new DateTime(2006, 1, 1), Cost = 999, Deleted = false }); 

DateTime firstDate = new DateTime(2001, 1, 1); 
DateTime lastDate = new DateTime(2006, 2, 1); 
List<DateTime> gapsList = new List<DateTime>(); 
gapsList.Add(firstDate); 
testList = testList.OrderBy(n => n.StartDate).ToList(); 
foreach(ProjectResourceCostDto item in testList) 
{ 
    if (item.Cost == 0) 
    { 
     gapsList.Add(item.StartDate); 
     gapsList.Add((DateTime)item.EndDate); 
    } 
} 
gapsList.Add(lastDate);