按日期显示结果ASP.NET MVC

时间:2015-08-26 07:51:41

标签: c# asp.net asp.net-mvc linq

任何人都可以告诉我这里出错的地方。我有一个错误列表,我希望能够按日期搜索。例如,如果我从日期选择器中选择日期20/08/2015,那么我希望列表只显示该日期的错误。默认情况下,它将显示数据库中的所有错误,但是当选择日期时,我只想显示该日期的错误。

控制器

[HttpPost]
public ActionResult Index(string sortOrder, int? page, DateTime? datePicker)
{
    ViewBag.CurrentSort = sortOrder;
    ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";

    DateTime userSelectedDate = DateTime.Parse(Request["datePicker"]);

    var applications = from s in db.ElmahErrors
                       where s.TimeUtc == userSelectedDate
                       select s;

    switch (sortOrder)
    {
        default:
            applications = applications.OrderByDescending(x => x.TimeUtc);
            break;
    }

    int pageSize = Int32.Parse(System.Configuration.ConfigurationManager.AppSettings["DefaultPageSize"]);
    int pageNumber = (page ?? 1);
    return View(applications.ToPagedList(pageNumber, pageSize));
}

视图

 @using (Html.BeginForm())
{
    <label for="datePicker">Find By Date:</label>

    @Html.TextBox("datePicker", null, new { @type = "date" })

    <input id="submitBtn" type="submit" value="Search" />
}

userSelectedDate变量从日期选择器中获取值,但它与任何错误都不匹配。有人可以帮忙吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

您根据DateTime而不是Date进行选择,因此记录必须在DateTime变量设置为的时间(低至毫秒)发生。要执行您之后的操作,您需要对选择的查询执行更多操作以仅匹配日期部分。有几种方法可以做到这一点,但这个问题很好地总结了它们:

How to compare only date components from DateTime in EF?

基本上,最简单的方法是在谓词的两个日期使用EntityFunctions.TruncateTime方法。

答案 1 :(得分:1)

@Chris Disley 指出您需要根据日期选择错误。通常的做法是,当您有一个日期时,选择日期在第二天和日期之间的所有行。像这样:

class MockFinalClassTest extends \PHPUnit_Framework_TestCase {

    public function testMock()
    {
        $em = \Mockery::mock("Doctrine\ORM\EntityManager");

        $query = new Doctrine\ORM\Query($em);
        $proxy = \Mockery::mock($query);
        $this->assertNotNull($proxy);

        $proxy->setMaxResults(4);
        $this->assertEquals(4, $query->getMaxResults());
    }