我有一个对象列表,其中包含一个人收费的开始日期和结束日期。
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; }
}
我有一个项目开始和结束日期。所以我需要做的是返回一个List<> '差距',没有设定费率。
因此,如果我的项目开始日期为“01-JAN-2013”并且结束于“31-DEC-2013”,那么它们就是我的输入。
我需要查看列表,并输出没有付款率的开始/结束日期列表。
所以,如果我的对象列表有:
开始= 05-JAN-2013 端= 01-OCT-2013
开始= 15-OCT-2013 端= 25-DEC-2013
然后,我需要回复: 01-JAN-2013 04-JAN-2013
02-OCT-2013 14-OCT-2013
26-DEC-2013 31-DEC-2013
那段时间我无法确定比率。
这是用C#代码完成的。我正在使用实体框架,所以MAYBE的另一个选择是SQL Server中的一个视图,我可以使用...我有一个包含所有日期的日历表...但是,如果有人有一个常规,那么第一个奖项就是我可以在代码中使用它来解决这些问题。
答案 0 :(得分: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);