如何使用Entity Framework获取前一天的下午6点

时间:2012-03-09 14:26:13

标签: c# linq entity-framework datetime

我遇到了一个问题,我必须对我的数据库记录执行一些操作,当前时间大于记录的时间(前一天下午6点)

示例:数据库记录时间为Mar-02-2012 03:00 pm 当前时间是Mar-01-2012 6:01 pm

现在当前时间大于前一天的下午6点。我创建了linq查询,就像这样

var a = (from trip in trips                        
         where EntityFunctions.DiffMinutes(DateTime.UtcNow,
                    EntityFunctions.AddDays(new DateTime(Convert.ToDateTime(EntityFunctions.AddDays(trip.bookTime, -1)).Year,
                        Convert.ToDateTime(EntityFunctions.AddDays(trip.bookTime, -1)).Month,
                        Convert.ToDateTime(EntityFunctions.AddDays(trip.bookTime, -1)).Day,
                        18,0,0),-1)) > 0
         select trip).ToList();

这里我尝试做的是在当前时间之间使用EntityFunctions.DiffMinutes在几分钟内获得差异,并从当前数据库日期减1天创建新日期,新创建日期的时间是下午6点。但我从实体框架中得到了这个例外。

  

LINQ to Entities中仅支持无参数构造函数和初始值设定项。

我的工作方式非常复杂甚至无法正常工作,所以请帮助我并提出一些简单的方法。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,这就是你所需要的:

void Main()
{
    var today = DateTime.Now;  // or UtcNow if you need to
    var todayMidnight = today.Date; 
    var yesterdayMidnight = todayMidnight.AddDays(-1);
    var yesterday6pm = yesterdayMidnight.AddHours(18);

    var trips = new List<Trip>
    {
        new Trip{ bookTime = todayMidnight },
        new Trip{ bookTime = yesterdayMidnight }
    };

    var a = trips.Where(t=>t.bookTime > yesterday6pm).ToList();
}

// Define other methods and classes here
class Trip{
    public DateTime bookTime{get;set;}
}

您可以将日期代码简化为:

var yesterday6pm = DateTime.Now.Date.AddDays(-1).AddHours(18);

var yesterday6pm = DateTime.Now.Date.AddHours(-6);

您当然不需要使用EntityFunction进行简单的日期比较。