为什么 Linq.Dynamic.Core 日期时间 属性 的查询被翻译成 TO_TIMESTAMP
Why Linq.Dynamic.Core query with datetime property is translated to TO_TIMESTAMP
我在 EF 和 Oracle.ManagedDataAccess.EntityFramework 12.1.2400 中使用 System.Linq.Dynamic.Core 版本 1.0.7.6。
知道为什么动态查询像
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
函数调用
区别在于你使用它的方式,Dynamic LINQ通过值绑定传递的变量,相当于使用常量 ] 静态查询中的值。等效的静态 LINQ 将是
EntitySet.Where(p => p.Date == new DateTime(2016, 02, 12))
这将以与示例动态查询相同的方式进行翻译。
如果您希望让 Dynamic LINQ 将变量作为参数绑定到结果查询,您可以使用具有如下属性的匿名类型:
EntitySet.Where($"Date == @0.date", new { date })
其翻译方式与示例静态查询相同。
我在 EF 和 Oracle.ManagedDataAccess.EntityFramework 12.1.2400 中使用 System.Linq.Dynamic.Core 版本 1.0.7.6。
知道为什么动态查询像
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
函数调用
区别在于你使用它的方式,Dynamic LINQ通过值绑定传递的变量,相当于使用常量 ] 静态查询中的值。等效的静态 LINQ 将是
EntitySet.Where(p => p.Date == new DateTime(2016, 02, 12))
这将以与示例动态查询相同的方式进行翻译。
如果您希望让 Dynamic LINQ 将变量作为参数绑定到结果查询,您可以使用具有如下属性的匿名类型:
EntitySet.Where($"Date == @0.date", new { date })
其翻译方式与示例静态查询相同。