繁体   English   中英

为什么将具有日期时间属性的Linq.Dynamic.Core查询转换为TO_TIMESTAMP

[英]Why Linq.Dynamic.Core query with datetime property is translated to TO_TIMESTAMP

我正在将System.Linq.Dynamic.Core版本1.0.7.6与EF和Oracle.ManagedDataAccess.EntityFramework 12.1.2400一起使用。

任何想法为什么动态查询喜欢

EntitySet.Where($"Date == @0", date)

被翻译成sql:

SELECT * FROM "Schema"."Entities" "Extent1"
WHERE (TO_TIMESTAMP('2016-02-12 00:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF') = "Extent1"."Date")

注意TO_TIMESTAMP函数调用。

而标准的Linq查询是在相同的上下文和相同的集合上

EntitySet.Where(p => p.Date == date)

被翻译成:

SELECT * FROM "Schema"."Entities" "Extent1" 
WHERE ("Extent1"."Date" = :p__linq__0)

没有TO_TIMESTAMP函数调用

区别在于您使用它的方式,动态LINQ 通过value绑定传递的变量,这等效于在静态查询中使用量值。 等效的静态LINQ将是

EntitySet.Where(p => p.Date == new DateTime(2016, 02, 12))

转换方式与示例动态查询相同。

如果希望让Dynamic LINQ将变量作为参数绑定到结果查询中,则可以使用具有以下属性的匿名类型:

EntitySet.Where($"Date == @0.date", new { date })

它将以与示例静态查询相同的方式进行翻译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM