【问题标题】:i got this exception in .net when try to compare date in linq当尝试在 linq 中比较日期时,我在 .net 中遇到了这个异常
【发布时间】: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();

【问题讨论】:

标签: c# asp.net entity-framework linq asp.net-web-api


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2017-12-07
    • 2018-10-06
    相关资源
    最近更新 更多