LINQ to Entities 不识别方法“System.DateTime AddDays(Double)
今天本想在linq里按照时间筛选一下超时的数据,一共两个字段FeedBackTime(计划反馈时间)、EndTime(实际反馈时间)。需求是这样的,查找数据库里所有EndTime大于FeedBackTime,且只计算到日,时分秒就不计算了。也就是说 计划时间和实际时间是同一天或实际时间小于计划时间,那么就认为不是超时的。
开始的时候我使用了下面这种方式:
query.Where(c =>c.FeedBackTime > c.EndTime.AddDays(1));
结果报错:
LINQ to Entities 不识别方法“System.DateTime AddDays(Double) 因此该方法无法转换为存储表达式
然后换用SqlFunctions. DateDiff 方法:
返回所指定开始日期和结束日期之间的指定 datepart 边界的计数。
query.Where( c => SqlFunctions.DateDiff("day", c.FeedBackTime, c.EndTime) < 0);
解决了。
1 2 | 命名空间: System.Data.Objects.SqlClient 程序集:System.Data.Entity(在 System.Data.Entity.dll 中) |
1 2 3 4 5 6 | [EdmFunctionAttribute( "SqlServer" , "DATEDIFF" )] public static Nullable< int > DateDiff( string datePartArg, Nullable<DateTime> startDate, Nullable<DateTime> endDate ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 参数 datePartArg 类型: System.String 要计算时间间隔差值的日期部分。 startDate 类型: System.Nullable<DateTime> 第一个日期。 endDate 类型: System.Nullable<DateTime> 第二个日期。 返回值 类型: System.Nullable<Int32> 两个日期之间的时间间隔数。 |
1 2 3 | 无法直接调用此函数。 此函数只能出现在 LINQ to Entities 查询中。 此函数将被转换为数据库中对应的函数。 |
分类:
net
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构