Я пытаюсь выполнить LEFT OUTER JOIN с критериями nhibernate. У меня также есть фильтр, который применяется к моим запросам.Выполнение левого внешнего соединения при применении фильтра nhibernate
Проблема заключается в том, что фильтр останавливает левое внешнее соединение, работая должным образом, если результат объединения равен нулю.
В очень простом примере я хочу, чтобы вернуть все музыканты, и если они находятся в группе, то и их группа
NHibernate генерирует следующий SQL
SELECT this_.Name, band2_.Name
FROM Musicians this_
left outer join [Band] band2_
on this_.BandID = band2_.ID
WHERE (band2_.IsDeleted = 0)
, который не будет возвращать если они не в группе. Я хочу что-то вроде
SELECT this_.Name, band2_.Name
FROM Musicians this_
left outer join [Band] band2_
on this_.BandID = band2_.ID
WHERE this_.ID = 4894 /* @p3 */
(band2_.ID IS NULL OR band2_.IsDeleted = 0)
Возможно ли это с nhibernate?
UPDATE
var projections = new[]
{
Projections.Property("Musician.Name").As("MusicianName"),
Projections.Property("Band.Name").As("BandName")
};
return this.sessionProvider.GetSession().CreateCriteria<Musician>("Musician")
.CreateCriteria("Musician.Band", "Band", JoinType.LeftOuterJoin)
.SetProjection(projections)
.Add(Restrictions.Eq("Musician.ID", parameters.MusicianId))
.SetResultTransformer(Transformers.AliasToBean<MusicianDetailsResult>())
.UniqueResult<MusicianDetailsResult>();
Фильтр определяется с FluentNHibernate
this.WithName(FilterName).WithCondition("IsDeleted = 0")
Можете ли вы опубликовать код ICriteria? – DanP