C# 除了不工作外,我是可数的

C# 除了不工作外,我是可数的,c#,ienumerable,C#,Ienumerable,我有以下代码 /// <summary> /// Calculates the date with a number of working days offset from today by /// calculating a set of dates that exclude weekends and holidays, then /// skipping forward the required number of days. /// </summa

我有以下代码

/// <summary>
///     Calculates the date with a number of working days offset from today by
///     calculating a set of dates that exclude weekends and holidays, then
///     skipping forward the required number of days.
/// </summary>
public static DateTime AddWorkingDays(int workingDays, DateTime startDate)
{
    var workDaysQuery = from n in Enumerable.Range(0, (workingDays + 14) * 2)
                        let date = startDate.AddDays(n)
                        where (date.DayOfWeek != DayOfWeek.Sunday) && (date.DayOfWeek != DayOfWeek.Saturday)
                        select date;
    var publicHolidays = GetPublicHolidays();

    var daysWorking = workDaysQuery.Except(publicHolidays).ToArray(); // why does this still include the publicHolidays ?

    return daysWorking.Skip(workingDays).First();
}
//
///计算从今天开始的工作日数被
///计算一组不包括周末和节假日的日期,然后
///跳过转发所需的天数。
/// 
公共静态DateTime AddWorkingDays(int workingDays,DateTime startDate)
{
var workDaysQuery=从可枚举范围中的n开始(0,(工作日+14)*2)
let date=startDate.AddDays(n)
其中(date.DayOfWeek!=DayOfWeek.Sunday)&(date.DayOfWeek!=DayOfWeek.周六)
选择日期;
var publicHolidays=GetPublicHolidays();
var daysWorking=workDaysQuery.Except(publicHolidays.ToArray();//为什么还包括publicHolidays?
返回daysWorking.Skip(workingDays.First();
}
但是,除此之外并没有取消公共假日

公共假日日期的时间部分均为零。

请尝试以下操作:

public static DateTime AddWorkingDays(int workingDays, DateTime startDate)
{
    var workDaysQuery = from n in Enumerable.Range(0, (workingDays + 14) * 2)
                        let date = startDate.AddDays(n)
                        where (date.DayOfWeek != DayOfWeek.Sunday)
                        && (date.DayOfWeek != DayOfWeek.Saturday)
                        select date.Date; //Remove the time component

    //The following change is not needed if you know for sure that 
    //values returned by GetPublicHolidays() will not include a time component
    var publicHolidays = GetPublicHolidays().Select(x => x.Date);

    var daysWorking = workDaysQuery.Except(publicHolidays).ToArray(); 

    return daysWorking.Skip(workingDays).First();
}

基本上,如果两个代码>日期时间< /COD>值具有相同的日期(年、月、日),但不同的时间成分,则系统将它们视为不相等的。 上面的代码所做的是,它使用属性只获取日期组件(不包括时间)。这样,相等性检查(除内部检查外,由

完成)将是正确的。

尝试以下操作:

public static DateTime AddWorkingDays(int workingDays, DateTime startDate)
{
    var workDaysQuery = from n in Enumerable.Range(0, (workingDays + 14) * 2)
                        let date = startDate.AddDays(n)
                        where (date.DayOfWeek != DayOfWeek.Sunday)
                        && (date.DayOfWeek != DayOfWeek.Saturday)
                        select date.Date; //Remove the time component

    //The following change is not needed if you know for sure that 
    //values returned by GetPublicHolidays() will not include a time component
    var publicHolidays = GetPublicHolidays().Select(x => x.Date);

    var daysWorking = workDaysQuery.Except(publicHolidays).ToArray(); 

    return daysWorking.Skip(workingDays).First();
}

基本上,如果两个代码>日期时间< /COD>值具有相同的日期(年、月、日),但不同的时间成分,则系统将它们视为不相等的。


上面的代码所做的是,它使用属性只获取日期组件(不包括时间)。这样,相等性检查(由
完成,内部除外)将是正确的。

尝试替换
选择日期使用
选择日期。日期并将
公共假日
替换为
公共假日。选择(x=>x.Date)
(如果
公共假日
的值包含时间,则需要此选项)我猜:
开始日期
的时间分量不是零。将其更改为
let date=startDate.date.AddDays(n)
尝试替换
选择日期使用
选择日期。日期并将
公共假日
替换为
公共假日。选择(x=>x.Date)
(如果
公共假日
的值包含时间,则需要此选项)我猜:
开始日期
的时间分量不是零。将其更改为
let date=startDate.date.AddDays(n)
ah workDaysQuery的日期为下午12点,publicHoilidays的日期为上午12点。ah workDaysQuery的日期为下午12点,publicHoilidays的日期为上午12点。