不能使用SQLite和EF6比较日期

本文关键字:EF6 比较 日期 SQLite 不能 | 更新日期: 2023-09-27 18:17:41

我正在尝试使用Linq对SQLite数据库上的实体进行日期比较。下面的代码工作,但我需要修剪掉时间部分,以获得正确的结果。

return (from c in Context.Car
        join d in Context.Driver on c.CarID equals d.DriverID
        join r in Context.Rides on c.CarID equals r.RideID into rideJoin
        from rides in rideJoin.DefaultIfEmpty()
        where c.IsActive && d.IsActive 
        group rides by new { c.CarID, d.FullName, d.HireDate, d.FirstPayRiseDate } into grp
        select new MyCustomClass
        {
            CarID = grp.Key.CarID,
            Driver = grp.Key.FullName,
            NumberOfRides = grp.Count(x => x != null && x.RideDate >= grp.Key.HireDate && x.RideDate <= grp.Key.FirstPayRiseDate)
        }).OrderBy(x => x.Driver ).ToList();

我已经尝试使用System.Data.Entity.DBFunctions,我得到这个错误:

NumberOfRides = grp.Count(x => x != null && DbFunctions.TruncateTime(x.RideDate) >= grp.Key.HireDate && DbFunctions.TruncateTime(x.RideDate) <= grp.Key.FirstPayRiseDate)

SQL逻辑错误或缺少数据库。TruncateTime

我也得到相同的错误与DBFunctions.DiffDays()


我也试过像这样转换日期,得到这个错误:

NumberOfRides = grp.Count(x => x != null && x.RideDate.Date >= grp.Key.HireDate && x.RideDate.Date <= grp.Key.FirstPayRiseDate)

'Date'在LINQ to Entities中不支持。只支持初始化式、实体成员和实体导航属性

给了什么?我应该如何做日期函数在Linq与SQLite实体??

不能使用SQLite和EF6比较日期

我需要修剪掉时间部分,以获得正确的结果

不,你没有。如果您想包含从startDateendDate的行,那么只需使用

... && x.RideDate >= startDate && x.RideDate < endDate.AddDays(1)

(注意第二次比较现在是"严格小于")

如何在数据库中存储日期?作为Unix时间积分?在这种情况下,你可以修改你的连接字符串,包括以下配置设置,这将使它更容易通过EF读取日期时间值。

datetimeformat = UnixEpoch; datetimekind = Utc

比如:

data source=&quot;|DataDirectory|'data.sqlite&quot;;datetimeformat=UnixEpoch;datetimekind=Utc

裁判:https://stackoverflow.com/a/24323591/3660930