[英]C# Linq with FirstorDefault
當我選擇一個日期時,我想顯示在該日期進行預訂的用戶的姓名,但是我只能看到進行最后預訂的用戶。 我怎樣才能解決這個問題?
這是我的代碼
foreach (Reservation i in con.Reservations)
{
var user = con.Users.Where(se => se.id == i.user_id).FirstOrDefault();
if (i.date == date && i.hour == label4.Text )
{
label4.Text = user.Name + " " + user.Surname;
}
else
{
label4.Text = "17:00 - 18:00";
}
if (i.date == date && i.hour == label5.Text)
{
label5.Text = user.Name + " " + user.Surname;
}
else
{
label5.Text = "16:00 - 17:00";
}
if (i.date == date && i.hour == label6.Text)
{
label6.Text = user.Name + " " + user.Surname;
}
else
{
label6.Text = "18:00 - 19:00";
}
if (i.date == date && i.hour == label7.Text)
{
label7.Text = user.Name + " " + user.Surname;
}
else {
label7.Text = "19:00 - 20:00";
}
}
我認為,您的邏輯是錯誤的。 您正在為每個循環的文本框和標簽INSIDE a分配值,這就是為什么循環結束后它們始終代表Reservations集合中的最后一個元素的原因。 因此,您需要重新編寫邏輯。
我相信您需要執行以下操作:
像這樣:
var labelMap = new Dictionary<string, Label>
{
{ "16:00 - 17:00", label1 }, { "17:00 - 18:00", label2 }, { "18:00 - 19:00", label3 }, { "19:00 - 20:00", label4 },
{ "20:00 - 21:00", label5 }, { "21:00 - 22:00", label6 }, { "22:00 - 23:00", label7 }, { "23:00 - 24:00", label8 }
};
// IMPORTANT: Reset all labels text to start fresh
foreach (var timeLabelItem in labelMap)
{
// labelXX.Text = "YY:00 - ZZ:00";
timeLabelItem.Value.Text = timeLabelItem.Key;
}
var today = DateTime.Today;
// This would work even with DateTime.Now
// OFF-TOPIC WARNING: If you store UTC time, it will come back as DateTime.Kind == Unspecified. This can bite you
var reservationsForToday = con.Reservations
.Where(x =>
x.date.Year == today.Year
&& x.date.Month == today.Month
&& x.date.Day == today.Day)
.ToList();
foreach (var reservation in reservationsForToday)
{
// Get which label is affected
var whichLabel = labelMap[reservation.hour];
// Get who's the user, if any
var user = con.Users.FirstOrDefault(u => reservation.user_id == u.id);
if (user == null)
{
continue;
}
// LabelXX.Text = "Juan D'Alotto";
whichLabel.Text = string.Concat(user.Name, " ", user.Surname);
}
這樣,您將獲得有關特定日期預訂(reservation_date)所需的所有信息。
var reservations = con.Reservations.Where(i=> i.Date == reservation_date).Select(s=> new {
date = s.date,
user_id = s.user_id,
name = s.user.name, // Reservations should be joined with Users
surname = s.user.surname,
hour = i.hour
}).Distinct();
然后,您可以應用其余的邏輯
foreach (var res in reservations)
{
if (i.date == date && i.hour == label4.Text )
{
label4.Text = res.Name + " " + res.Surname;
}
else
{
label4.Text = "17:00 - 18:00";
}
if (i.date == date && i.hour == label5.Text)
{
label5.Text = res.Name + " " + res.Surname;
}
else
{
label5.Text = "16:00 - 17:00";
}
if (i.date == date && i.hour == label6.Text)
{
label6.Text = res.Name + " " + res.Surname;
}
else
{
label6.Text = "18:00 - 19:00";
}
if (i.date == date && i.hour == label7.Text)
{
label7.Text = res.Name + " " + res.Surname;
}
else {
label7.Text = "19:00 - 20:00";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.