c#根据轮班情况在一个月内安排非工作日
我有一份员工轮班天数(工作日)列表,如下所示:c#根据轮班情况在一个月内安排非工作日,c#,linq,datetime,C#,Linq,Datetime,我有一份员工轮班天数(工作日)列表,如下所示: List<int> workingDays = new List<int>(); workingDays.Add(1); // monday workingDays.Add(2); // tuesday workingDays.Add(3); // wednesday workingDays.Add(5); // friday 等等 关于如何得到这份名单有什么线索吗 更新: 这是我的尝试: for (int day = 1
List<int> workingDays = new List<int>();
workingDays.Add(1); // monday
workingDays.Add(2); // tuesday
workingDays.Add(3); // wednesday
workingDays.Add(5); // friday
等等
关于如何得到这份名单有什么线索吗
更新:
这是我的尝试:
for (int day = 1; day <= DateTime.DaysInMonth(currentDate.Year, currentDate.Month); day++) {
DateTime dt = new DateTime(currentDate.Year, currentDate.Month, day);
var shiftDay = shifts.Where(s => (int) dt.DayOfWeek - 1 == s.Day && s.IsActive).First();
if (shiftDay == null) {
// this is a non-working day because wasn't found in the shift List
}
}
for(int day=1;day(int)dt.DayOfWeek-1==s.day&&s.IsActive);
if(shiftDay==null){
//这是非工作日,因为在班次列表中找不到
}
}
您应该使用DayOfWeek
枚举而不是int,以使代码更具可读性,更不容易出错:
List<DayOfWeek> workingDays = new List<DayOfWeek>() {
DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Friday
};
var nonWorkingDays = Enumerable.Range(1, 31)
.Select(x => new DateTime(2014, 7, x))
.Where(d => !workingDays.Contains(d.DayOfWeek))
.ToList();
List workingDays=new List(){
星期一,星期一,星期二,星期二,星期三,星期五
};
var非工作日=可枚举范围(1,31)
.选择(x=>新日期时间(2014年7月x日))
.Where(d=>!workingDays.Contains(d.DayOfWeek))
.ToList();
是否有一种方法可以使用Int值来执行此操作?您可以将Int
和DayOfWeek
强制转换为彼此。您应该能够找出如何使它在int
s中工作。
List<DayOfWeek> workingDays = new List<DayOfWeek>() {
DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Friday
};
var nonWorkingDays = Enumerable.Range(1, 31)
.Select(x => new DateTime(2014, 7, x))
.Where(d => !workingDays.Contains(d.DayOfWeek))
.ToList();