检查今天的日期是否存在于 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 的当前日期。