在使用实体框架的c#中,获取30天到期的记录

本文关键字:获取 30天 记录 实体 框架 | 更新日期: 2023-09-27 18:04:24

我是c#世界和实体框架的新手。

我需要从在30天内到期的表中检索项目。我知道我可以在SQL端(使用存储过程)进行过滤,但我正在寻找实体框架中的解决方案。

这是我当前的代码:

using (var db = new MyDbContext())
{
    var deliverableItems = db.Deliverables
            .ToList() // fetch all records from Deliverable table.
            .Where(d => Is30DaysDue(d));
    foreach (var deliverable in deliverableItems)
    {
        Console.WriteLine(deliverable.DeliverableTitle);
        // perform action on due items....
    }
}
internal static bool Is30DaysDue(Deliverable deliverable)
{
    var deliverableDueDate = deliverable.DeliverableRevisedDueDate ?? deliverable.DeliverableDueDate.Date;
    var dateDiff = (deliverableDueDate.Date - DateTime.Now.Date).TotalDays;
    return dateDiff == 30;
}

正如您在第4行中看到的,我首先从Deliverables表中检索所有记录,然后执行所需的过滤。

是否有任何方法获取30天到期的项目使用实体框架?

编辑:

之前忘了提,我有两个日期DeliverableRevisedDueDateDeliverableDueDate。如果修改的截止日期为空,则只考虑交付截止日期。

在使用实体框架的c#中,获取30天到期的记录

编辑

我忘记了一些日期时间功能不支持链接到实体。所以你必须像这样使用

var newDate = DateTime.Now.Date.AddDays(-30);
 var deliverableItems = db.Deliverables
 .ToList() // fetch all records from Deliverable table.
.Where(d => d.DeliverableDueDate.Year == newDate.Year &&
d.DeliverableDueDate.Month == newDate.Month&&
d.DeliverableDueDate.Day == newDate.Day  );