在实体框架中查询今天的记录

本文关键字:今天 记录 查询 实体 框架 | 更新日期: 2023-09-27 18:19:33

如何在下面的EF中只获得今天的记录。我尝试了以下内容,但没有成功:

 List<VacancyBasket> VacancyBasket = bModel.VacancyBaskets
                      .Where(b => b.BasketID == teacherGuid && b.Created == DateTime.Now)
                      .ToList();

我收到异常:

LINQ to Entities中不支持指定的类型成员"Date"。仅初始值设定项、实体成员和实体导航属性支持。

在实体框架中查询今天的记录

您需要像这个一样转换为DateTime

var todaysDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month,  DateTime.Today.Day);

现在通过过滤器

List<VacancyBasket> VacancyBasket = bModel.VacancyBaskets
                  .Where(b => b.BasketID == teacherGuid && b.Created == todaysDate)
                  .ToList();

否则你会先得到今天的约会。

DateTime today = DateTime.Now.Date;

然后像这样实现:

List<VacancyBasket> VacancyBasket = bModel.VacancyBaskets
                  .Where(b => b.BasketID == teacherGuid && (b.Created.Value.Year == today.Year &&  b.Created.Value.Month == today.Month && b.Created.Value.Day== today.Day))
                  .ToList();

尽管其他答案都是正确的,但您可以通过以下方式将语句转换为查询来避免拆分日期:首先,将System.Data.Entity命名空间添加到类中:

Using System.Data.Entity;

并使用DbFunctions.TruncateTime来缩短时间部分,这样您就可以在确切的两个日期之间进行比较(Today和VacancyBackets.Create values):

var myCollection = from b in bModel.VacancyBaskets where
    DbFunctions.TruncateTime(b.Created) == DbFunctions.TruncateTime(DateTime.Now) && b.BasketID == teacherGuid
                                           select new {*YOUR SELECTION GOES HERE*};

我希望这能有所帮助!

不能在LINQ语句中使用Date方法。您需要将日期保存到DateTime变量中,并在LINQ语句中使用该变量。

您也可以使用

List<VacancyBasket> VacancyBasket = bModel.VacancyBaskets
                  .Where(b => b.BasketID == teacherGuid && b.Created.Day == DateTime.Now.Day)
                  .ToList();

如果Created列是DateTime变量,则可以执行此

List<VacancyBasket> VacancyBasket = bModel.VacancyBaskets
                  .Where(b => (b.BasketID == teacherGuid && b.Created.Value.Day == DateTime.Now.Day ) )
                  .ToList();