动态表达铸造日期时间作为时间戳(Dynamic Expression Casting DateTim

2019-10-19 04:41发布

当运行对实体原料LINQ声明与实体框架5 - db2400数据库,这个where子句呈现为良好的SQL,并根据需要执行:

where entity.Number == stringNumber && entity.EffectiveDate == effectiveDate

渲染SQL条款:

WHERE (Filter1.NUMBER = @p__linq__0) AND (Filter1.EFFECTIVE_DATE = @p__linq__1)}

然而,当与此相同的日期时间进行比较,动态地生成的表达式,该SQL被发送到DB2400作为字符串铸造时间戳。 和DB2说,“我不能比较时间戳和日期!” (由于列的类型是日期上的表格)。

渲染表达:

Entity => ((Entity.Number == "somestring") And (Entity.EffectiveDate == 10/1/2012 12:00:00 AM))

渲染SQL:

WHERE (('someString' = Extent1.NUMBER)) AND (CAST('2012-10-01 00:00:00.00000' AS timestamp) = Extent6.EFFECTIVE_DATE)}

这个日期表达是如何构建的?

Expression.Equal(Property, DateTime.Parse(someDateTime.ToString()));
文章来源: Dynamic Expression Casting DateTime as timestamp