[英]Check if todays date exists in a table with Entity Framework
我有一个包含dateTime
类型列的数据库表。
现在我需要查看是否已经有一行包含今天的日期,但我不知道如何在没有小时、分钟、秒的情况下将该列与当前日期进行比较。
基本上我有2022-02-04 14:06:21.080
,我需要检查是否在2022-02-04
上创建了一行。
我正在寻找类似的东西
if (db.dates.Where(x => x.SentDate == Date.Now).Count() > 0)
{
// Do something
}
else
{
// Do something else
}
我只需要看看它是否有一个从今天开始的日期,不管它是什么时候创建的。
任何帮助深表感谢!
如果要过滤特定日期,则可以在两个DateTime
对象上使用DateTime.Date
属性。 这将比较DateTime
的日期部分:
db.dates.Where(x => x.SentDate.Date == DateTime.Now.Date)
// or
db.dates.Where(x => x.SentDate.Date == DateTime.Today)
如果你有一个可以为空的DateTime?
列,然后将Value
属性与HasValue
一起使用:
db.dates.Where(x => x.SentDate.HasValue
&& x.SentDate.Value.Date == DateTime.Today)
不幸的是,表达式树不支持 null 传播运算符?.
所以我们需要改用上面的方法。
DateTime.Date
也可用于日期范围,但请注意上限。
PS: DateTime.Today
与DateTime.Now.Date
相同
您可以检查日期范围
var today = DateTime.Today;
var tomorrow = today.AddDays(1);
if(db.dates.Where(x => x.SentDate >= today && x.SentDate < tomorrow) ...
DateTime.Today 属性获取当前日期,时间组件设置为 00:00:00。
请注意,我们使用>= today
( today
表示今天 00:00:00)测试下限,但使用< tomorrow
测试上限,因为我们不想在 00:00:00 包括明天。
您可以检查日期范围
var today = DateTime.Today;
var tomorrow = today.AddDays(1);
if(db.dates.Where(x => x.SentDate >= today && x.SentDate < tomorrow) ...
DateTime.Today 属性获取当前日期,时间组件设置为 00:00:00。
如果您使用 MS SQL 服务器,您可以使用一个特殊的 function EF.Functions.DateDiff
,它是为与 EF 一起使用而创建的。 它可以计算从秒到月的日期时间差。 DateDiffDay
用于计算天数。
var dateTimeNow = DateTime.Now;
if (db.dates.Any(x => EF.Functions.DateDiffDay(x.SentDate , dateTimeNow) == 0 )
{
// ... there are today's dates
}
// ...
另一种方法是将日期转换为字符串并进行比较。
if(db.dates.Any(m=>m.SentDate.ToString("d") == DateTime.Now.ToString("d"))){
//Do something else
}
else
{
// Do something else
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.