按日期和时间筛选列表MVC / C#

时间:2016-04-06 13:27:29

标签: c# asp.net-mvc linq

我试图根据开始日期和结束日期来过滤列表,有时它会根据我输入的信息给出正确的行,有时不会。以下是我的查询是否有人在逻辑中看到任何问题?

public List<MyTicket> FilteredTickets => Tickets.Where(x =>
        (string.IsNullOrEmpty(TicketType) || x.RequestTypeId == TicketType) &&
        (StartDate == null || x.DateLogged >= StartDate) && (EndDate == null || x.DateLogged <= EndDate)).ToList();

3 个答案:

答案 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)

您目前正在检查StartDateEndDate值是否为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