正在删除条件中的分组

本文关键字:条件 删除 | 更新日期: 2023-09-27 18:24:38

LINQ to NHibernate删除where子句中的括号:

session.Query<MyEntity>().Where(x => (x.MyProp1 < end && x.MyProp1 > start) ||
                                     (x.MyProp2 < end && x.MyProp2 > start));

这将导致以下查询(注意缺少括号):

select <columns> from MY_ENTITY where MY_PROP1 < :p0 and MY_PROP1 > :p1 or 
                                      MY_PROP2 < :p2 and MY_PROP2 > :p3;

这是一个巨大的问题,因为它显著地改变了查询条件。

这是已知的问题还是我做错了什么?

正在删除条件中的分组

因为AND的运算顺序高于OR,所以不需要括号,所以查询提供程序不会添加冗余信息。

为了帮助记住运算顺序,布尔AND被认为类似于乘法(对二进制值),OR被认为类似于对二进制值的加法。当处理布尔代数(在非编程环境中)时,使用*表示AND和+表示OR实际上并不罕见。

AND的优先级高于OR,就像乘法的优先级高于加法一样。

因此,括号是多余的,在表达式树中不存在。