如何在linq to entity中实现回访剩余天数

首先在实现这个功能的时候想到的是在ViewModel中直接用get 属性计算。

[DisplayName("最近回访时间")]
        public DateTime? LastReviewTime { get; set; }
 [DisplayName("回访设定天数")]
        public int Days { get; set; }
 /// <summary>
        /// 回访剩余天数
        /// </summary>
        [DisplayName("回访剩余天数")]
        public int? ReviewRemainDays
        {
            get
            {
                if (LastReviewTime == null)
                {
                    return null;
                }
                TimeSpan ts = DateTime.Now - LastReviewTime.Value;
                return Days - ts.Days;
            }

        }


ReviewRemainDays,这样计算确实实现了,也能用。只是有限制,在linq语句中无论是 order by 中,还是 select 中,ReviewRemainDays都不能使用。只是在页面中可以根据查询结果列出ReviewRemainDays 的值。而我需要按ReviewRemainDays 排序。为了解决这个问题,我进行了如下改造:

var db = new DbContext();
            var query = from a in db.Customer.Where(lambda)
                        join c in db.Intentionality on a.IntentionalityId equals c.IID
                        select new CustomerViewModel
                        {
                            GID = a.GID,
                            IID = a.IID,                          
                            //ReviewRemainDaysOrder = c.Days - (DateTime.Now - a.LastReviewTime.Value).Days,
                            ReviewRemainDaysOrder = c.Days - SqlFunctions.DateDiff("day", a.LastReviewTime, DateTime.Now),
                           
                        };


首先在这个linq 查询中想这样用:ReviewRemainDaysOrder = c.Days - (DateTime.Now - a.LastReviewTime.Value).Days

但实际上这样用直接报了这样的错误:

DbArithmeticExpression 参数必须具有数值通用类型

知道是怎么回事,在这样的linq语句中,这种 C#中的用法不被支持。

使用了ReviewRemainDaysOrder = c.Days - SqlFunctions.DateDiff("day", a.LastReviewTime, DateTime.Now) ,经过测试,可以,但实际上这两种计算方法计算结果是有区别的。

public int? ReviewRemainDays 这个中的get 实现有时会比c.Days - SqlFunctions.DateDiff("day", a.LastReviewTime, DateTime.Now)  这种计算小一天。推测应该是 第一种使用的是timespan,这种计算精确到了毫秒级。而c.Days - SqlFunctions.DateDiff("day", a.LastReviewTime, DateTime.Now)  这个是粗粒度的计算,只是到了天这一级别。但对于我这个问题来说,只是按回访剩余天数排序,足够用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值