目前我正在玩NH3,这对于非常简单的事情来说非常棒。 当谈到不那么简单时,我们就失去了。
我正在创建示例电影数据库。 我想显示每个具有类型数量的电影实体 与电影有关。 输出列表应如下所示:
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中完成吗?
- 问候, Macko
答案 0 :(得分:0)
我知道这个问题现在已经有几个月了,但我正在寻找类似的东西,并提出了一个解决方案。
在我的场景中,我有一个类型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>();