我使用的是System.Linq.Dynamic.Core版本1.0.7.6,带有EF和Oracle.ManagedDataAccess.EntityFramework12.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
函数调用
2条答案
按热度按时间cnjp1d6j1#
区别在于你使用它的方式,动态LINQ绑定传递的变量 * 通过值 *,这相当于在静态查询中使用 * 常量 * 值。等效的静态LINQ是
其将以与示例动态查询相同的方式进行转换。
如果你想让Dynamic LINQ将变量作为参数绑定到结果查询,你可以使用匿名类型和如下属性:
它将以与示例静态查询相同的方式进行转换。
5gfr0r5j2#
当我在当前版本的System.Linq.Dynamic.Core中遇到同样的问题时,我无意中发现了这个老问题。要在当前版本中修复它,您只需启用
UseParameterizedNamesInDynamicQuery
配置选项,例如: