Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何循环一类开始和结束日期时间,在每次迭代中将每个日期范围之间的日期存储到列表中?_C#_Wcf - Fatal编程技术网

C# 如何循环一类开始和结束日期时间,在每次迭代中将每个日期范围之间的日期存储到列表中?

C# 如何循环一类开始和结束日期时间,在每次迭代中将每个日期范围之间的日期存储到列表中?,c#,wcf,C#,Wcf,基本上,我正在尝试获取给定小屋ID的可用日期列表(制作假期预订系统) 不确定我的逻辑是否正确,但我在想,是否有一个从今天到2019年最后一天的所有日期的列表 然后,我在数据库中遍历一类日期范围,这些日期范围由预定日期填充,并用这些日期填充一个新的列表;然后创建第三个列表,如availableDates=allDays.Except(bookedates) 问题是一个列表是list,另一个是list,它有2个DateTime属性 如何迭代dateRange类,然后为每个日期范围存储到达和离开日期之

基本上,我正在尝试获取给定小屋ID的可用日期列表(制作假期预订系统)

不确定我的逻辑是否正确,但我在想,是否有一个从今天到2019年最后一天的所有日期的
列表

然后,我在数据库中遍历一类日期范围,这些日期范围由预定日期填充,并用这些日期填充一个新的
列表
;然后创建第三个列表,如
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带有可枚举项,您可以潜在地返回所有日期,直到时间结束,并拥有客户端代码决定何时停止枚举。