当尝试在 linq 中比较日期时,我在 .net 中遇到了这个异常
Posted
技术标签:
【中文标题】当尝试在 linq 中比较日期时,我在 .net 中遇到了这个异常【英文标题】:i got this exception in .net when try to compare date in linq 【发布时间】:2020-11-29 10:23:39 【问题描述】:LINQ to Entities 不支持指定的类型成员“日期”。仅支持初始化器、实体成员和实体导航属性
var tripss = context.trips.Join(context.UserMasters, t => t.DriverId, u => u.UserID,
(tr, us) => new
DateOfTrip = DbFunctions.TruncateTime(tr.DateOfTrip),
DriverId = tr.DriverId,
FromCity = tr.FromCity,
ID = tr.ID,
PlaceToMeet = tr.PlaceToMeet,
TimeOfTrip = tr.TimeOfTrip,
ToCity = tr.ToCity,
Name = (us.FullName == null) ? us.UserName : us.FullName,
ImageUrl = us.ImageUrl,
PostTime=(DbFunctions.TruncateTime( tr.TimeOfPost)==DateTime.Now.Date)?
(tr.TimeOfPost.Value.Hour==DateTime.Now.Hour)? (DbFunctions.DiffMinutes(DateTime.Now,tr.TimeOfPost).Value)
: DbFunctions.DiffHours(DateTime.Now,tr.TimeOfPost).Value : DbFunctions.DiffDays(DateTime.Now, tr.TimeOfPost).Value
).ToList();
【问题讨论】:
检查这个答案 - ***.com/questions/6919709/… 这能回答你的问题吗? Only initializers, entity members, and entity navigation properties are supported @TimothyG。不,不是,答案在这段代码中 DbFunctions.TruncateTime(tr.TimeOfPost)==DateTime.Now.Date) 在 linq 表达式中使用日期时间时,我们不能在 datetime 类中使用日期属性 【参考方案1】:对于此查询,您可以将日期时间变量移到查询之外。
var dt = DateTime.Now.Date;
var now = DateTime.Now;
var hour = DateTime.Now.Hour;
var tripss = context.trips.Join(context.UserMasters, t => t.DriverId, u => u.UserID,
(tr, us) => new
DateOfTrip = DbFunctions.TruncateTime(tr.DateOfTrip),
DriverId = tr.DriverId,
FromCity = tr.FromCity,
ID = tr.ID,
PlaceToMeet = tr.PlaceToMeet,
TimeOfTrip = tr.TimeOfTrip,
ToCity = tr.ToCity,
Name = (us.FullName == null) ? us.UserName : us.FullName,
ImageUrl = us.ImageUrl,
PostTime=(DbFunctions.TruncateTime( tr.TimeOfPost)== dt)?
(tr.TimeOfPost.Value.Hour== hour)? (DbFunctions.DiffMinutes(now, tr.TimeOfPost).Value)
: DbFunctions.DiffHours(now, tr.TimeOfPost).Value : DbFunctions.DiffDays(now, tr.TimeOfPost).Value
).ToList();
【讨论】:
【参考方案2】:答案在此代码DbFunctions.TruncateTime( tr.TimeOfPost)==DateTime.Now.Date)
中,当在 linq 表达式中使用 datetime.now 时,我们不能在 datetime 类中使用 date 属性
删除 .date 解决了问题
【讨论】:
但是应该是DateTime.Today
。以上是关于当尝试在 linq 中比较日期时,我在 .net 中遇到了这个异常的主要内容,如果未能解决你的问题,请参考以下文章
从 C# 保存到 SQL 中的 DATE 类型列 - Linq to SQL
使用 Entity Framework 4 和 Linq 查询比较 DateTime 属性中的日期的简单方法
e.slice 不是带有 Kendo UI 的 ASP.NET MVC 中的函数错误
将 Mongodb 中的日期与 C# LINQ 驱动程序进行比较