• linq和lamda表达式中添加时间判断时解决方案


    在工作中遇到个问题,在使用lamda查询数据的时候,需要添加一个时间判断, DateTime.AddDays(3) > e.ExpirationDate

    例如:list = Context.VoucherUserSignPLView.Where(e => e.IsUse == isUse && e.ExpirationDate >= DateTime.Now && DateTime.AddDays(days) > e.ExpirationDate).ToList();

    当然,这段代码能够完全通过编译,但问题来了,当运行到该句时,却报错了

          --->其他信息: LINQ to Entities 不识别方法“System.DateTime AddDays(Double)”,因此该方法无法转换为存储表达式。

    问题很明显,不识别AddDays方法,只能换个东东,于是 EntityFunctions 类 登场了, 实体方法s,一目了然。

    msdn 上面的解释 :提供在 LINQ to Entities 查询中,公开概念模型规范函数的公共语言运行时 (CLR) 方法。 

    https://msdn.microsoft.com/zh-cn/library/vstudio/system.data.objects.entityfunctions(v=vs.100).aspx

    于是选用了自己需要的方法 EntityFunctions.DiffDays。

    使用后:list = Context.VoucherUserSignPLView.Where(e => e.IsUse == isUse && e.ExpirationDate >= DateTime.Now && System.Data.Objects.EntityFunctions.DiffDays(DateTime.Now, e.ExpirationDate) <= days).ToList();

    运行无异常。

     

  • 相关阅读:
    js 那些事二 javascript中的闭包理解
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java入门
    Java入门
    Java入门
  • 原文地址:https://www.cnblogs.com/lc-ant/p/4597355.html
Copyright © 2020-2023  润新知