如何在linq中获取两个日期之间的工作日计数。如果我给的像是1/1/2014(LeaveFrom)到3/1/2014(LeaveTo),我需要得到像'3'这样的答案。我试过像
NoofDays= Enumerable.Range(0, 1 + (LA.LeaveTo).Subtract(LA.LeaveFrom).Days)
.Select(offset => (LA.LeaveFrom).AddDays(offset)).Count()
如果您将每天都算作一个工作日,则您的代码已经可以使用了。简化一下:
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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句