NHibernate IQueryOver где предложение с коллекцией - PullRequest
1 голос
/ 07 января 2012

Я пытаюсь сделать простую проверку на пустую коллекцию в NHIbernate Query.Вот мой код:

var query = QueryNotDeleted().Where(x=>x.Markets.Count() > 0);

QueryNotDeleted возвращает IQueryOver.Приведенная выше строка выдает ошибку (нераспознанный вызов метода в выражении x.Markets.Count ()), поскольку он не распознает Count () в запросе.

Я пытался

var query = QueryNotDeleted().Where(x=>x.Markets != null);

Но, к сожалению, Markets никогда не бывает NULL, поэтому я должен проверить счетчик, а не NULL, чтобы получить нужные мне записи.

Как я могу получить правильный синтаксис "count", чтобы исключить записигде свойство Markets пусто?

Ответы [ 2 ]

1 голос
/ 09 января 2012

Я смог заставить его работать, используя:

query.RootCriteria.CreateAlias("Markets", "m", JoinType.LeftOuterJoin);

, а затем

query.RootCriteria.Add(Restrictions.IsNotNull("m.Id"));
0 голосов
/ 07 января 2012

Если я правильно понимаю ваш вопрос, вы хотите получить список записей, у которых нет соответствующих детей?

Если бы я хотел получить список Orders, у которого нет OrderItems, используя QueryOver, то я бы сделал что-то вроде: -

var orders = session.QueryOver<Order>()
  .Left.JoinQueryOver(w => w.Items)
  .Where(w => w.Order.Id == null);

Если это неправильный ответ, пожалуйста, отправьте SQL, который вы пытаетесь запустить, и сопоставления parent / children /.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...