2013-07-07 1 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; } 
    } 

У меня есть дата начала и окончания проекта. Поэтому мне нужно вернуть список <> «Пробелы», где нет набора ставок.

Итак, если у меня есть дата начала проекта как «01-JAN-2013» и конец «31-DEC-2013», это мои данные.

Мне нужно пройти через список и вывести список дат начала/окончания, где нет ставок оплаты.

Так что, если мой список объектов есть:

Start = 05-JAN-2013 End = 01-Октябрь-2013

Start = 15-Октябрь-2013 End = 25-DEC- 2013

Тогда я должен был бы вернуться: 01-JAN-2013 04-JAN-2013

02-октября-2013 14-октября-2013

26-DEC-2013 31-DEC-2013

Это период, когда я не могу определить курс.

Это должно быть сделано в коде C#. Я использую Entity Framework, поэтому MAYBE другой вариант будет View в 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); 
Смежные вопросы