获取linq中两个日期之间的工作日数

时间:2014-06-03 11:05:20

标签: c# linq

如何获得linq中两个日期之间的工作日数。 如果我像2014年1月1日(LeaveFrom)那样给予3/1/2014(LeaveTo),我需要得到像'3'这样的答案。 我试过像

NoofDays=  Enumerable.Range(0, 1 + (LA.LeaveTo).Subtract(LA.LeaveFrom).Days)
                                         .Select(offset => (LA.LeaveFrom).AddDays(offset)).Count()

2 个答案:

答案 0 :(得分:1)

如果您每天都计算一个工作日,那么您的代码已经可以使用了。简化你的事情:

Enumerable.Range(0, 1 + (to - from).Days)
    .Select(offset =>(from).AddDays(offset)).Count()

Select是多余的,因为您之后只做了Count,所以:

 Enumerable.Range(0, 1 + (to - from).Days).Count()

但你在这里所做的只是计算Range(int start, int count)函数产生的数字,所以所有的枚举都没有意义,因为你已经在第一时间指定了这个数,即

1 + (to - from).Days

但是,如果您想使用某些待定义函数排除周末等,则枚举将非常有用,例如

Func<DateTime, bool> isWorkDay = x => 
{
    if(x.DayOfWeek == DayOfWeek.Saturday) return false;
    if(x.DayOfWeek == DayOfWeek.Sunday) return false;
    if(x.Day == 25 && x.Month == 12) return false;
    // etc.
    return true;
};

Enumerable.Range(0, 1 + (to - from).Days)
    .Where(x => isWorkDay(from.AddDays(x))).Count()

答案 1 :(得分:0)

我建议你改用TimeSpan。很容易得到你想要的结果。

DateTime LeaveFrom= DateTime.ParseExact("01/01/2014", "dd/MM/yyyy", CultureInfo.InvariantCulture);    
DateTime LeaveTo = DateTime.ParseExact("03/01/2014", "dd/MM/yyyy", CultureInfo.InvariantCulture);    
 TimeSpan dtspan = LeaveTo- LeaveFrom;    
 double diff=  dtspan.TotalDays;