我有一个表,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”时,它可以被检索。那么,如何检索我今天创建的行(忽略时间)?
检查该列是否大于或等于今天,小于明天:
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将能够在CreatedBy
和CreatedDate
列上使用合适的索引来满足您的查询。
当您试图筛选列时,通常最好避免调用列上的函数,因为这意味着查询不可SARGable。但是,根据DBA上的此线程,将datetime
/datetime2
列转换为date
是SARGable,至少在MicrosoftSQLServer中是这样。
a.CreatedDate.Date == DateTime.Today.Date