如何获得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()
答案 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;