現在、私はNH3で遊んでいますが、これは本当に単純なことには最適です。それほど単純ではないということになると、私たちは迷子になります。
サンプルの映画データベースを作成しています。映画に関連付けられているジャンルの数ですべての映画エンティティを表示したいと思います。出力リストは次のようになります。
MovieId | タイトル| プレミア| ジャンルカウント
3 | bla bla | 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();
では、genresQueryをmovieQueryと結合して、サマリーエンティティリストを作成する方法を考えてみましょう。たとえば、MovieSummary(MovieSummaryには追加の列GenresCountがあります)としましょう。QueryOverで実行できますか?NH3でできますか?
-よろしく、マッコ