Linq条件查询在同一个表/对象上

时间:2011-01-28 14:25:09

标签: c# linq nhibernate linq-to-nhibernate

嗨,我遇到了让条件查询生效的问题。我想要所有项目,其中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();

3 个答案:

答案 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();