Вы бы использовали либо WHILE
цикл в Sql Server, либо рекурсивный CTE в Sql Server 2005 +
CTE
DECLARE @StartTime DATETIME,
@EndTime DATETIME,
@Inc INT
SELECT @StartTime = '10:00',
@EndTime = '17:30',
@Inc = 1
;WITH Vals AS (
SELECT @StartTime RunTime
UNION ALL
SELECT DATEADD(mi,@Inc,RunTime)
FROM Vals
WHERE DATEADD(mi,@Inc,RunTime) <= @EndTime
)
SELECT *
FROm Vals
OPTION (MAXRECURSION 0)
Для C # я бы реализовал что-то простое, например
C #
DateTime startTime = DateTime.Today.AddHours(10);
DateTime endTime = DateTime.Today.AddHours(17).AddMinutes(30);
int inc = 1;
List<DateTime> timeList = new List<DateTime>();
while (startTime < endTime)
{
timeList.Add(startTime);
startTime = startTime.AddMinutes(inc);
}
timeList.Add(endTime);
или даже
DateTime startTime = DateTime.Today.AddHours(10);
DateTime endTime = DateTime.Today.AddHours(17).AddMinutes(30);
List<DateTime> timeEnumList = new List<DateTime>();
Enumerable.Range(0, (int)(endTime.Subtract(startTime).TotalMinutes / inc) + 1).ToList().ForEach(i => timeEnumList.Add(startTime.AddMinutes(i)));