Я не большой специалист Linq для NHibernate, но я знаю, что есть еще один способ запроса NHibernate, которые могли бы помочь вам, а также , Это называется QueryOver
. Это строго типизированный синтаксис запроса, который использует выражения типа Linq. Сейчас QueryOver
гораздо более устойчив в сообществе NHibernate, главным образом потому, что он основан на запросах критериев (которые были в течение довольно продолжительного времени).
Если вы заинтересованы в получении дополнительной информации о различных языках запросов, вы должны проверить этот сайт: NHibernate: Queries
У меня также есть блог, где у меня есть статья о различных плагин и технологиях, которые можно использовать с NHibernate (в том числе способов для запроса) - My Blog
Ниже должно быть близкое представление о том, что вы, возможно, ищете, используя запрос.
Album a = null;
Tracks t = null;
Indices i = null;
var query = session.GetQueryOver(() => a)
.JoinAlias(() => a.Tracks,() => t)
.JoinAlias(() => t.Indicies,() => i)
.Where(() => i.Indices.Count() == 0)
.Take(20)
.ToList()
;
При добавлении присоединяется к запросу вам также позволяющее задать тип соединения, добавив еще один параметр типа JoinType
для вызова метода. Ex:
.JoinAlias(() => a.Tracks,() => t, JoinType.LeftOuterJoin)
Этот запрос на запрос имеет ту же проблему, что описывает OP. Take будет применен к Join и не будет возвращать 20 альбомов, а 20 присоединяться к строкам. – Firo