提问者:小点点

实体框架获取当前日期行(当天的时间)


我有一个表,dateime的值是这样的

2021-12-08 10:10:54.657
2021-12-08 10:10:41.567
2021-12-08 10:09:51.960
2021-12-08 10:10:54.657
2021-12-08 10:10:41.567
2021-12-08 10:09:51.960
2021-12-08 10:10:54.657

我想得到那一天或今天(现在是2021年12月8日)。因此,我尝试在控制器中使用EF:

 ViewBag.CByUserToday = _db.ArrayDatas.Where(a => a.CreatedBy == user && a.CreatedDate == DateTime.Today.Date).Count();

但我还是没有弄明白。当我尝试调试DateTime时。今天日期,是指日期时间。今天={09/12/2021 00:00:00}。但当我尝试将createddate更新为“2021-12-09 00:00:00.000”时,它可以被检索。那么,如何检索我今天创建的行(忽略时间)?


共2个答案

匿名用户

检查该列是否大于或等于今天,小于明天:

DateTime today = DateTime.Today;
DateTime tomorrow = today.AddDays(1);
ViewBag.CByUserToday = _db.ArrayDatas
    .Where(a => a.CreatedBy == user 
             && a.CreatedDate >= today 
             && a.CreatedDate < tomorrow)
    .Count();

这样,您的DBMS将能够在CreatedByCreatedDate列上使用合适的索引来满足您的查询。

当您试图筛选列时,通常最好避免调用列上的函数,因为这意味着查询不可SARGable。但是,根据DBA上的此线程,将datetime/datetime2列转换为date是SARGable,至少在MicrosoftSQLServer中是这样。

匿名用户

a.CreatedDate.Date == DateTime.Today.Date