Условный запрос Linq для той же таблицы / объекта - PullRequest
0 голосов
/ 28 января 2011

Привет У меня проблема с получением условного запроса на работу. Я хочу, чтобы все проекты, где 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 голосов
/ 28 января 2011

Этот запрос не будет работать, поскольку для свойства 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();
0 голосов
/ 09 февраля 2011

Выполнение объединения на стороне клиента не требуется:

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();
0 голосов
/ 28 января 2011

Я бы предложил получить весь проект и проверить, что происходит с проектами, которые должны быть нулевыми. Без каких-либо примеров данных и т. Д. Я должен догадаться, что является причиной проблемы. Я бы сказал, что родители проекта инициализированы с некоторым пустым состоянием.

...