正在删除条件中的分组
本文关键字:条件 删除 | 更新日期: 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
,就像乘法的优先级高于加法一样。
因此,括号是多余的,在表达式树中不存在。