Mam kilka zdarzeń w bazie danych dla mojej aplikacji rejestracji zdarzeń, w których daty mogą być ustawione przez
public DateTime? DateStart { get; set; }
public DateTime? DateEnd { get; set; }
Oba pola są zerowalne, a jeśli chcę, chcę otrzymywać bieżące zdarzenia 1) DateStart to ta sama data co dzisiaj, lub 2) Teraz jest pomiędzy DateStart i DateEnd
public async Task<List<EventInfo>> GetOngoingEventsAsync()
{
return await _db.EventInfos
.Where(i =>
i.Published &&
i.DateStart.Value.Date == DateTime.Now.Date ||
i.DateStart.Value.Date <= DateTime.Now.Date <= i.DateEnd.Value.Date)
.OrderBy(s => s.DateStart)
.ToListAsync();
}
Jednak mój powyższy kod zwraca: Operator "<=" cannot be applied to operands of type "bool" and "DateTime"
Odpowiedzi:
1 dla odpowiedzi № 1Przyczyną błędu była pierwsza część warunku i.DateStart.Value.Date <= DateTime.Now.Date
zostanie zatwierdzony i zostanie przekonwertowany na Boolean
. Potem próbowałeś porównać Boolean
z DateTime
tak jak <= i.DateEnd.Value.Date
. Dlatego właśnie rozdzielam te dwa warunki &&
operator.
(DateTime.Now.Date >= i.DateStart.Value.Date && DateTime.Now.Date <= i.DateEnd.Value.Date)
0 dla odpowiedzi nr 2
To powinna być poprawna forma twojego kodu:
(DateTime.Now.Date >= i.DateStart.Value.Date && DateTime.Now.Date <= i.DateEnd.Value.Date)