NH3 простые резюме - PullRequest
       3

NH3 простые резюме

0 голосов
/ 27 декабря 2010

В настоящее время я играю с NH3, и он отлично подходит для простых вещей. Когда дело доходит до менее простого, мы потерялись.

Я создаю пример базы данных фильмов. Я хочу отобразить каждую сущность фильма с количеством жанров, связано с фильмом. Список вывода должен выглядеть так:

MovieId | Название | Премьера Жанры Количество

3 | бла бла | 1990-01-01 | 2

При использовании SQL это выглядело бы так:

select f.*, isnull(fg.counter, 0) as genres_count
from dbo.movie f left join
(
select id_movie, count(id_genre) as counter
from dbo.movie_genres
group by id_movie
) fg on f.id = fg.id_movie 

Как видите, это действительно простой сводный SQL.

Теперь агрегация, которая подсчитывает жанры для каждого фильма, используя QueryOver:

GenreSummary alias = null;
var genresQuery = QueryOver.Of<MovieGenre>()
.SelectList(lista => lista
.SelectGroup(o => o.Film.Id).WithAlias(() => alias.MovieId)
.SelectCount(o => o.Genre).WithAlias(() => alias.GenresCount))
.TransformUsing(Transformers.AliasToBean<GenreSummary>());

Запрос фильма:

var movieQuery = QueryOver.Of<Movie>().ToList();

Итак, как теперь объединить жанры Query с movieQuery для создания резюме список сущностей, скажем, MovieSummary (MovieSummary имеет дополнительный столбец GenresCount)? Можно ли это сделать с помощью QueryOver? Можно ли это сделать в NH3?

- С Уважением, Macko

1 Ответ

0 голосов
/ 22 июня 2011

Я знаю, что этому вопросу уже несколько месяцев, но я искал что-то подобное и нашел решение.

В моем сценарии у меня есть тип Parent, у которого есть один дочерний элемент типа Child, и коллекция с именем OtherChildren типа AnotherChild. Мое резюме содержит свойства Id и Name родительского элемента, имени дочернего элемента и счетчика коллекции OtherChildren.

IIUC ваш объект Movie имеет коллекцию MovieGenres, и вы хотите получить сводную информацию о фильме и количество его жанров. Я думаю, что это похоже на выбор Parent Name и количества OtherChildren в объекте итога.

Это сработало для меня:

ParentSummary parentSummary = null;
Child child = null;
IList<AnotherChild> otherChildren = null;

var result = session.QueryOver<Parent>()
  .JoinAlias(x => x.Child, () => child)
  .JoinAlias(x => x.OtherChildren, () => otherChildren)
  .SelectList(list => list
      .SelectGroup(x => x.Id).WithAlias(() => parentSummary.Id)
      .SelectGroup(x => x.Name).WithAlias(() => parentSummary.Name)
      .SelectGroup(() => child.Name).WithAlias(() => parentSummary.ChildName)
      .SelectCount(x => x.OtherChildren).WithAlias(() => parentSummary.OtherChildrenCount))
  .TransformUsing(Transformers.AliasToBean<ParentSummary>())
  .List<ParentSummary>();
...