任何人都可以告诉我这里出错的地方。我有一个错误列表,我希望能够按日期搜索。例如,如果我从日期选择器中选择日期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
变量从日期选择器中获取值,但它与任何错误都不匹配。有人可以帮忙吗?
提前致谢。
答案 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());
}