2016-09-18 107 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

具体什么不工作?顺便说一句,我不是很确定这个表达式做了什么'd.DateCreated> = start!= null' – Shyju

+0

我试过这样做,没有设置它不等于null,但那也行不通。我只是在玩它而已。第一个控制器中的方法会正确地返回日期过滤日期,但合并的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; 
}