簡體   English   中英

每個Linq-需要咨詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM