[英]Linq For Each - Need Advice
我有这段代码。
var foundAppointments = ServiceLink.FindAppointments(User, SiteSecureKey);
var MondayAppointments = foundAppointments.SelectMany(x => x.Where(y => y.StartTime.Date.DayOfWeek == DayOfWeek.Monday)).ToList();
现在,我有了一个全局列表,我也添加了每天的约会,例如星期一,星期二,星期三等。
然后我运行:
Appointments.Add(MondayAppointments); ..........
除了周一至周日的约会,我还有什么需要写的。
var TuesdayAppointments = foundAppointments.SelectMany(x=>x.Where(y => y.StartTime.Date.DayOfWeek == DayOfWeek.Tuesday)).ToList();
var WednesdayAppointments = foundAppointments.SelectMany(x=>x.Where(y => y.StartTime.Date.DayOfWeek == DayOfWeek.Wednesday)).ToList();
var ThursdayAppointments = foundAppointments.SelectMany(x=>x.Where(y =>y.StartTime.Date.DayOfWeek == DayOfWeek.Thursday)).ToList();
var FridayAppointments = foundAppointments.SelectMany(x=>x.Where(y => y.StartTime.Date.DayOfWeek == DayOfWeek.Friday)).ToList();
var SaturdayAppointments = foundAppointments.SelectMany(x => x.Where(y => y.StartTime.Date.DayOfWeek == DayOfWeek.Saturday)).ToList();
var SundayAppointments = foundAppointments.SelectMany(x => x.Where(y => y.StartTime.Date.DayOfWeek == DayOfWeek.Saturday)).ToList();
Appointments.Add(TuesdayAppointments);
Appointments.Add(WednesdayAppointments);
Appointments.Add(ThursdayAppointments);
Appointments.Add(FridayAppointments);
Appointments.Add(SaturdayAppointments);
Appointments.Add(SundayAppointments);
有任何想法吗?
您可以从DayOfWeek
枚举中枚举值,并获取每一天的约会:
var days = Enum.GetValues(typeof(DayOfWeek));
foreach (DayOfWeek dayOfWeek in days)
{
var dayAppointments = foundAppointments.SelectMany(x => x.Where(y => y.StartTime.Date.DayOfWeek == dayOfWeek)).ToList();
Appointments.Add(dayAppointments);
}
如果您需要星期一作为第一天,则对日期进行排序:
var days = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>()
.OrderBy(d => d == DayOfWeek.Sunday)
.ThenBy(d => d);
顺便说一句,为什么您每天都在增加约会? 看起来您可以一次添加所有内容。 如果要从星期一开始按顺序添加约会:
var appintmentsToAdd = foundAppointments
.SelectMany(x => x)
.OrderBy(a => a.StartTime.Date.DayOfWeek == DayOfWeek.Sunday)
.ThenBy(a => a.StartTime.Date.DayOfWeek)
.ToList();
Appointments.Add(appintmentsToAdd);
使用Enum.GetValues
获取所有可能的DayOfWeek
值:
var days = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>().ToArray();
然后使用AddRange
一次向Appointments
中添加多个元素:
var foundAppointments = ServiceLink.FindAppointments(User, SiteSecureKey);
Appointments.AddRange(days.Select(d => foundAppointments.SelectMany(x=>x.Where(y => y.StartTime.Date.DayOfWeek == d)).ToList());
或者直接从查询中创建Appointments
:
var Appointments.AddRange(days.Select(d => foundAppointments.SelectMany(x=>x.Where(y => y.StartTime.Date.DayOfWeek == d)).ToList()).ToList();
尝试这个:
IEnumerable<DayOfWeek> daysOfWeek = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>();
var appointmentsOnDaysOfWeek = daysOfWeek
.GroupJoin(
foundAppointments,
dayOfWeek => dayOfWeek,
appointment => appointment.StartDate.DayOfWeek,
(day, appointments) => new
{
Day = day,
Appointments = appointments.ToList()
})
.OrderBy(appointmentsOnDay => appointmentsOnDay.Day)
.Select(appointmentsOnDay => appointmentsOnDay.Appointments);
Appointments.AddRange(appointmentsOnDaysOfWeek);
更新 :我没有在周一应该是星期一的几天前开始订购。 要修复它,请更换
.OrderBy(appointmentsOnDay => appointmentsOnDay.Day)
同
.OrderBy(appointmentsOnDay => appointmentsOnDay.Day == DayOfWeek.Sunday)
.ThenBy(appointmentsOnDay => appointmentsOnDay.Day)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.