NH3简单摘要

时间:2010-12-27 12:52:59

标签: c# nhibernate queryover

目前我正在玩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中完成吗?

- 问候,  Macko

1 个答案:

答案 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>();