如何解决在NHibernate上使用QueryOver来获取有限制的子项计数
|| 如何使用QueryOver和无公式字段执行以下操作。 我有以下父母/子女关系public class Club {
public string Name {get; set;}
public IList<Membership> Memberships {get; set;}
}
public class Membership {
public boolean Cancelled {get; set;}
public Club Club {get; set;}
}
我有以下查询,该查询返回15个俱乐部并将结果转换为DTO,我需要向该查询添加属于每个俱乐部且未取消的Membership的RowCount。
IEnumerable<ClubIndexviewmodelLinesummary> results = _querySession.QueryOver<Club>()
.OrderBy(c => c.IsActive).Desc
.OrderBy(c => c.Name).Asc
.SelectList(list => list
.Select(c => c.Id).WithAlias(() => sum.Id)
.Select(c => c.Name).WithAlias(() => sum.Name)
.Select(c => c.IsActive).WithAlias(() => sum.IsActive)
.Select(c => c.NumberOfWeeks).WithAlias(() => sum.NumberOfWeeks))
.TransformUsing(Transformers.AliasToBean<ClubIndexviewmodelLinesummary>())
.Skip(start)
.Take(15)
.Future<ClubIndexviewmodelLinesummary>();
解决方法
经过更多研究后,这是有效的结果查询:
Club clubAlias = null;
IEnumerable<ClubIndexViewModelLineSummary> results =
_querySession.QueryOver<Club>(() => clubAlias)
.OrderBy(c => c.IsActive).Desc
.OrderBy(c => c.Name).Asc
.SelectList(list => list
.Select(c => c.Id).WithAlias(() => sum.Id)
.Select(c => c.Name).WithAlias(() => sum.Name)
.Select(c => c.IsActive).WithAlias(() => sum.IsActive)
.Select(c => c.NumberOfWeeks).WithAlias(() => sum.NumberOfWeeks)
.SelectSubQuery
(
QueryOver.Of<ClubMembership>()
.Where(c => c.Canceled == false)
.And(c=> c.Club.Id == clubAlias.Id)
.ToRowCountQuery()
).WithAlias(()=> sum.ActiveMembers))
.TransformUsing(Transformers.AliasToBean<ClubIndexViewModelLineSummary>())
.Skip(start)
.Take(15)
.Future<ClubIndexViewModelLineSummary>();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。