繁体   English   中英

检查今天的日期是否存在于带有实体框架的表中

[英]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.TodayDateTime.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。

请注意,我们使用>= todaytoday表示今天 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM