C# 如何循环一类开始和结束日期时间,在每次迭代中将每个日期范围之间的日期存储到列表中?
基本上,我正在尝试获取给定小屋ID的可用日期列表(制作假期预订系统) 不确定我的逻辑是否正确,但我在想,是否有一个从今天到2019年最后一天的所有日期的C# 如何循环一类开始和结束日期时间,在每次迭代中将每个日期范围之间的日期存储到列表中?,c#,wcf,C#,Wcf,基本上,我正在尝试获取给定小屋ID的可用日期列表(制作假期预订系统) 不确定我的逻辑是否正确,但我在想,是否有一个从今天到2019年最后一天的所有日期的列表 然后,我在数据库中遍历一类日期范围,这些日期范围由预定日期填充,并用这些日期填充一个新的列表;然后创建第三个列表,如availableDates=allDays.Except(bookedates) 问题是一个列表是list,另一个是list,它有2个DateTime属性 如何迭代dateRange类,然后为每个日期范围存储到达和离开日期之
列表
然后,我在数据库中遍历一类日期范围,这些日期范围由预定日期填充,并用这些日期填充一个新的列表
;然后创建第三个列表,如availableDates=allDays.Except(bookedates)
问题是一个列表是list
,另一个是list
,它有2个DateTime
属性
如何迭代dateRange类,然后为每个日期范围存储到达和离开日期之间的所有日期
从数据库获取预订日期的服务方法
public List<DateRange> GetBookedDates(int id)
{
DateRange dateRange = new DateRange();
DateTime start = Convert.ToDateTime(dateRange.Arrive);
DateTime endDate = Convert.ToDateTime(dateRange.Depart);
SqlConnection conn = new SqlConnection(dataSource);
List<DateRange> bookedDates = new List<DateRange>();
//To avoid sql injections parameters are used so the sql query is not concatinated with user input.
string sqlQueryDeleteBooking = "SELECT Arrive, Depart FROM dbo.Bookings WHERE Cottage_ID=@id";
SqlCommand cmd = new SqlCommand(sqlQueryDeleteBooking, conn);
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
if (!reader.HasRows)
{
throw new Exception();
}
else
{
bookedDates.Add(new DateRange()
{
Arrive = Convert.ToDateTime(reader["Arrive"]),
Depart = Convert.ToDateTime(reader["Depart"]),
});
for (DateTime dates = start; dates <= endDate; dates = dates.AddDays(1))
{
bookedDates.Add(dates);
}
}
}reader.NextResult();
return bookedDates;
}
日期范围类
[DataContract]
public class DateRange
{
[DataMember]
public DateTime Arrive { get; set; }
[DataMember]
public DateTime Depart { get; set; }
}
}
因此,是的,我们的想法是从allDays
列表中删除DateRange
中的所有预定天数
我有一个所有日期的列表
和一个列表bookedate
如何一起使用它们
蒂亚 我更愿意将可用日期作为延迟枚举返回:
public static IEnumerable<DateTime> GetAvailableDates(int id)
{
DateTime startDate = DateTime.Today;
DateTime endDate = new DateTime(2019, 12, 31);
var bookedDates = GetBookedDates(id);
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
if (bookedDates.Any(range => date >= range.Arrive && date <= range.Depart)) continue;
yield return date;
}
}
公共静态IEnumerable GetAvailableDates(int-id)
{
DateTime startDate=DateTime.Today;
DateTime endDate=新的日期时间(2019年12月31日);
var bookedDates=GetBookedDates(id);
对于(DateTime-date=startDate;date-date>=range.arrival&&date,我希望将可用日期作为延迟枚举返回:
public static IEnumerable<DateTime> GetAvailableDates(int id)
{
DateTime startDate = DateTime.Today;
DateTime endDate = new DateTime(2019, 12, 31);
var bookedDates = GetBookedDates(id);
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
if (bookedDates.Any(range => date >= range.Arrive && date <= range.Depart)) continue;
yield return date;
}
}
公共静态IEnumerable GetAvailableDates(int-id)
{
DateTime startDate=DateTime.Today;
DateTime endDate=新的日期时间(2019年12月31日);
var bookedDates=GetBookedDates(id);
对于(DateTime date=startDate;date date>=range.Arrival&&date 1)为什么不使用哈希集来存储使用过的日期。您只需迭代预定日期(从到达到离开)并将其添加到集合中。2)获得此列表后,您可以执行集合操作,例如从一年内所有日期的集合中减去这些日期(使用.ExceptWith()方法)。1)为什么不使用哈希集来存储使用过的日期。您只需遍历预定日期(从到达到离开)并将其添加到集合中。2)获得此列表后,您可以执行集合操作,例如从一年内所有日期的集合中减去这些日期(使用.ExceptWith()方法)。太棒了,它只需几行代码就可以将可用日期返回到WCF客户端!现在只需将它们添加到表单上。没有使用var
或IEnumerable
,因此感谢您向我介绍它们!@DaviebPrime具有可枚举性,您可以返回所有日期,直到时间结束,并让客户端代码决定何时返回停止枚举。太棒了,这只需几行代码就可以将可用日期返回到WCF客户端!现在只需将它们放到表单上。没有使用var
或IEnumerable
,所以感谢您向我介绍它们!@DaviebPrime带有可枚举项,您可以潜在地返回所有日期,直到时间结束,并拥有客户端代码决定何时停止枚举。