检查今天的日期是否存在于 table 和 Entity Framework 中
Check if todays date exists in a table with Entity Framework
我有一个数据库 table,其列类型为 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
}
我只需要查看它是否有今天的日期,它的创建时间并不重要。
非常感谢任何帮助!
您可以检查日期范围
var today = DateTime.Today;
var tomorrow = today.AddDays(1);
if(db.dates.Where(x => x.SentDate >= today && x.SentDate < tomorrow) ...
DateTime.Today Property 获取时间组件设置为 00:00:00 的当前日期。
请注意,我们使用 >= today
测试下限(today
表示今天在 00:00:00),但使用 < tomorrow
测试上限,因为我们不希望包括明天 00:00:00.
如果您要过滤特定日期,您可以在两个 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)
遗憾的是,表达式树不支持空传播运算符?.
所以我们需要使用上面的方法来代替。
DateTime.Date
也可用于日期范围,但要注意上限。
PS: DateTime.Today
等同于 DateTime.Now.Date
如果您使用 MS SQL 服务器,您可以使用一个特殊的函数 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
}
您可以检查日期范围
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 的当前日期。
我有一个数据库 table,其列类型为 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
}
我只需要查看它是否有今天的日期,它的创建时间并不重要。
非常感谢任何帮助!
您可以检查日期范围
var today = DateTime.Today;
var tomorrow = today.AddDays(1);
if(db.dates.Where(x => x.SentDate >= today && x.SentDate < tomorrow) ...
DateTime.Today Property 获取时间组件设置为 00:00:00 的当前日期。
请注意,我们使用 >= today
测试下限(today
表示今天在 00:00:00),但使用 < tomorrow
测试上限,因为我们不希望包括明天 00:00:00.
如果您要过滤特定日期,您可以在两个 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)
遗憾的是,表达式树不支持空传播运算符?.
所以我们需要使用上面的方法来代替。
DateTime.Date
也可用于日期范围,但要注意上限。
PS: DateTime.Today
等同于 DateTime.Now.Date
如果您使用 MS SQL 服务器,您可以使用一个特殊的函数 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
}
您可以检查日期范围
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 的当前日期。