c# - 条件分组正在被删除

标签 c# .net 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));

这会产生以下查询(请注意缺少的括号):

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

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

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

最佳答案

因为 AND 在操作顺序上比 OR 具有更高的优先级,所以不需要括号,所以查询提供程序不会添加冗余信息。

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

关于c# - 条件分组正在被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297235/

相关文章:

c# - 分析 WPF + WCF + EF 应用程序

c# - 如何使用 LINQ 将 .csv 文件读入数组

c# - Xaml 绑定(bind)全景 Windows Phone 8

javascript - 如何从 .Net 代码隐藏中获取数据到 mixpanel (JavaScript)

c# - 流利的休眠状态 : Enum in composite key gets mapped to int when I need string

sql-server - 在数据库中建模通用关系(用 C# 表示)

NHibernate: "collection was not processed by flush()"延迟加载问题导致

c# - CLR 如何处理静态类?

c# - 使用 postsharp 将方面应用到方面

c# - 使用绑定(bind)将椭圆与线连接起来