NHibernate 3.3.3.4000 プロジェクトでグループ化とカウントを使用して要約クエリを作成しています。多対多の関係を持つドメイン オブジェクトPosition
とがあります。Tag
1 つの位置には少数のタグがありますが、時間の経過とともに各タグに多数の位置が存在するようになります。したがって、関係は一方向で、Position にはタグのコレクションがありますが、その逆はありません。
AcademicTerm
私のクエリは、特定の(位置のスカラー参照) に接続されている位置について、各タグで位置の数をカウントアップします。以下のクエリは機能します。
public IPartialResult<TagSummary> GetTagSummaries(string termCode, int skip, int take)
{
Tag tagAlias = null;
AcademicTerm termAlias = null;
TagSummary summary = null;
var tagQuery = Session.QueryOver<Position>()
.JoinAlias(p => p.Term, () => termAlias)
.Where(() => termAlias.TermCode == termCode)
.JoinQueryOver<Tag>(t => t.Tags, () => tagAlias)
.SelectList(projections => projections
.SelectGroup(p => tagAlias).WithAlias(() => summary.Tag)
.SelectCount(p => p.ID).WithAlias(() => summary.PositionCount))
.TransformUsing(Transformers.AliasToBean<TagSummary>());
var countQuery = tagQuery.ToRowCountQuery().FutureValue<int>();
var resultQuery = tagQuery
.OrderBy(t => t.Name).Asc
.Skip(skip)
.Take(take)
.Future<TagSummary>();
return new PartialResult<TagSummary>(resultQuery, countQuery.Value);
結果のタイプはTagSummary
次のとおりです。
public class TagSummary
{
public string TagName { get; set; }
public int PositionCount { get; set; }
}
そこにあるのは Tag の Name プロパティですが、私が本当に欲しいのは Tag そのものです。その方法がわかりません。権利はありますがtagAlias
、TagSummary に入れる方法がわかりません。の個々のプロパティを選択する必要がありますTag
か? タグの ID 値を選択して、別のクエリを実行することもできますが、あまりうまくいきません。
更新グループ化が取り除かれる
ため、カウントクエリが機能しないことToRowCountQuery
がわかりました。今、私はそれを解決しようとしています。