在工作中遇到个问题,在使用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();
运行无异常。