Dan*_*rth 6 .net c# nhibernate linq-to-nhibernate
LINQ to NHibernate删除where子句中的括号:
session.Query<MyEntity>().Where(x => (x.MyProp1 < end && x.MyProp1 > start) ||
(x.MyProp2 < end && x.MyProp2 > start));
Run Code Online (Sandbox Code Playgroud)
这导致以下查询(请注意缺少的括号):
select <columns> from MY_ENTITY where MY_PROP1 < :p0 and MY_PROP1 > :p1 or
MY_PROP2 < :p2 and MY_PROP2 > :p3;
Run Code Online (Sandbox Code Playgroud)
这是一个很大的问题,因为它会显着改变查询条件.
这是一个已知问题还是我做错了什么?
由于AND在OR上的操作顺序具有更高的优先级,因此不需要括号,因此查询提供程序不会添加冗余信息.
为了帮助记住操作顺序,布尔AND被认为类似于乘法(在二进制值上),并且OR被认为类似于二进制值上的加法.在处理布尔代数时(在非编程环境中),实际上并非常见的是使用*表示AND而+表示OR.