嗨,我遇到了让条件查询生效的问题。我想要所有项目,其中project.Parent要么为null,要么如果它有一个父项,那么它不应该被废弃或关闭。
我的示例不会带回project.Parent == null。
的任何项目我们正在使用linq-to-nhibernate
var projects = (from project in this.Session.Query<Project>()
where project.IsClosed == false
&& project.IsVoided == false
&& (project.Parent == null
|| (project.Parent.IsVoided == false
&& project.Parent.IsClosed == false))
select project).ToList();
答案 0 :(得分:0)
我建议获取所有项目并检查应该为null的项目会发生什么。没有任何示例数据等我必须猜测导致问题的原因。我会说项目父母被初始化为一些空状态。
答案 1 :(得分:0)
该查询无效,因为为Parent属性生成了内连接。
最简单的解决方法是执行两个查询并将其连接到客户端:
var projects = (from project in this.Session.Query<Project>()
where project.IsClosed == false
&& project.IsVoided == false
&& project.Parent == null
select project)
.AsEnumerable()
.Concat(
(from project in this.Session.Query<Project>()
where project.IsClosed == false
&& project.IsVoided == false
&& project.Parent.IsVoided == false
&& project.Parent.IsClosed == false
select project))
.ToList();
答案 2 :(得分:0)
不需要执行加入客户端:
var projects = (from project in this.Session.Query<Project>()
where project.Parent == null || (project.IsClosed == false
&& project.IsVoided == false)
&& (project.Parent == null
|| (project.Parent.IsVoided == false
&& project.Parent.IsClosed == false))
select project).ToList();