在Entity Framework中查询Todays记录

时间:2015-10-27 17:17:53

标签: c# sql entity-framework linq

我如何只在下面的EF中获得今天的记录。我试过下面但没有运气:

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

我得到了例外:

  

指定的类型成员&#39;日期&#39; LINQ to Entities不支持。   仅初始化程序,实体成员和实体导航属性   得到支持。

5 个答案:

答案 0 :(得分:6)

您需要像这样投射到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();

答案 1 :(得分:3)

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

Using System.Data.Entity;

并使用DbFunctions.TruncateTime截断时间部分,因此您可以在确切的两个日期(今天和VacancyBaskets.Create值)之间进行比较:

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*};

我希望这会有所帮助!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你也可以使用

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

答案 4 :(得分:0)

如果您的 Created 列是 DateTime 变量,您可以这样做

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