我试图根据开始日期和结束日期来过滤列表,有时它会根据我输入的信息给出正确的行,有时不会。以下是我的查询是否有人在逻辑中看到任何问题?
public List<MyTicket> FilteredTickets => Tickets.Where(x =>
(string.IsNullOrEmpty(TicketType) || x.RequestTypeId == TicketType) &&
(StartDate == null || x.DateLogged >= StartDate) && (EndDate == null || x.DateLogged <= EndDate)).ToList();
答案 0 :(得分:0)
您需要修复如下:
public List<MyTicket> FilteredTickets =
Tickets.Where(x =>
(!string.IsNullOrEmpty(TicketType) && x.RequestTypeId == TicketType) &&
(StartDate != null && x.DateLogged >= StartDate) &&
(EndDate != null && x.DateLogged <= EndDate)).ToList();
答案 1 :(得分:0)
您目前正在检查StartDate
和EndDate
值是否为null或更高,而不是null和更高:
public List<MyTicket> FilteredTickets => Tickets.Where(x =>
(string.IsNullOrEmpty(TicketType) || x.RequestTypeId == TicketType) &&
(StartDate != null && x.DateLogged >= StartDate) &&
(EndDate != null && x.DateLogged <= EndDate))
.ToList();
因此,只要您的前一个表达式被评估,它就会看到其中一个日期字段为空,并将整个部分评估为true
,从而显示结果而不是将其过滤掉。
答案 2 :(得分:0)
它是一个下拉列表,因此它必须允许用户将其留空(null),这样就不会出现错误,但显然问题是因为它正在调用get方法,而不是帖子,它与日期和时间格式混淆。我已经找到了一些关于设置全局设置和文化的答案,以解决这个问题。 MVC DateTime binding with incorrect date format