2016-09-18 8 views
0

Мой фильтр даты отлично работает, когда я помещаю его в отдельный вид, но у меня возникают проблемы с его объединением с другими фильтрами, и я не уверен, где я ошибаюсь. Все остальные фильтры работают. Не могли бы вы взглянуть и сообщить мне, что мне нужно изменить, когда я присоединяюсь к моему запросу другим, чтобы заставить его работать и сливаться? Спасибо!Фильтр даты не работает должным образом MVC

Вот как это выглядит в отдельном контроллере, и это работает в целях:

public ActionResult DateFilter(FormCollection DatePicker) 
    { 
     DateTime start = DateTime.Today; 
     DateTime end = DateTime.Today; 

     if (DatePicker.Count > 0) 
     { 
      start = DateTime.Parse(DatePicker["startDate"].ToString()); 
      end = DateTime.Parse(DatePicker["endDate"].ToString()); 
     } 
     var Issue = db.Issue.Where(d => d.DateCreated >= start && d.DateCreated <= end).Select(i => new IssueViewModel 
     { 
      Name = i.Name, 
      Description = i.Description, 
      DateCreated = i.DateCreated, 
      DateCompleted = i.DateCompleted, 
      //ect. 
     }).ToList(); 

     ViewBag.Issue = Issue; 

     return View(); 
    } 

Вот как это выглядит слиты с другими фильтрами:

private static IQueryable<Issue> FilterDeviceList(List<Issue> issues, FormCollection DatePicker, string EHP, string IssueKey) 
    { 
     var query = issue.AsQueryable(); 

     //COPYING STARTS HERE 
     DateTime start = DateTime.Today; 
     DateTime end = DateTime.Today; 

     if (DatePicker.Count > 0) 
     { 
      start = DateTime.Parse(DatePicker["startDate"].ToString()); 
      end = DateTime.Parse(DatePicker["endDate"].ToString()); 
     } 
      query = query.Where(d => d.DateCreated >= start != null && d.DateCreated <= end != null && d.DateCreated == Convert.ToDateTime(DatePicker)); 

      //COPYING ENDS HERE 

     if (!string.IsNullOrWhiteSpace(EHP)) 
      query = query.Where(i => i.EHPP != null && i.EHPP == (EHP == "1" ? false : true)); 

     if (!string.IsNullOrWhiteSpace(IssueKey)) 
      query = query.Where(i => i.IssueKey != null && i.IssueKey.Contains(IssueKey)); 

return query; 
} 

Если кто-нибудь нужно увидеть представление или контроллер, который вызывает IQueryable, пожалуйста, дайте мне знать, и я могу опубликовать его, но я думаю, этого должно быть достаточно. Еще раз спасибо! :)

+0

Что конкретно не работает? BTW, я не совсем уверен, что это выражение делает 'd.DateCreated> = start! = Null' – Shyju

+0

Я пробовал делать это, не устанавливая его равным нулю, но это тоже не работает. Я просто играл с ним. Метод в первом контроллере корректно возвращает фильтр даты на дату, но метод в объединенном контроллере IQueryable ничего не возвращает, и я не уверен, что в строке нужно изменить или где он должен быть помещен. – Millie

ответ

0

Попробуйте это:

private static IQueryable<Issue> FilterDeviceList(List<Issue> issues, FormCollection DatePicker, string EHP, string IssueKey) 
{ 
    var query = issues.AsQueryable(); 

    DateTime start,end; 

    if (DatePicker.Count > 0) 
    { 
     start = DateTime.ParseExact(DatePicker["startDate"].ToString(), "MM/dd/yyyy", CultureInfo.InvariantCulture); 
     end = DateTime.ParseExact(DatePicker["endDate"].ToString(), "MM/dd/yyyy", CultureInfo.InvariantCulture); 
    } 
    // assuming start and end date will not be null 
    if(start != null && end !=null) 
    { 
     query = query.Where(d => d.DateCreated >= start && d.DateCreated <= end); 
    } 

    if (!string.IsNullOrWhiteSpace(EHP)) 
     query = query.Where(i => i.EHPP != null && i.EHPP == (EHP == "1" ? false : true)); 

    if (!string.IsNullOrWhiteSpace(IssueKey)) 
     query = query.Where(i => i.IssueKey != null && i.IssueKey.Contains(IssueKey)); 

    return query; 
} 
Смежные вопросы