让孩子计数使用QueryOver NHibernate的限制 [英] Get children count with restrictions using QueryOver on NHibernate
本文介绍了让孩子计数使用QueryOver NHibernate的限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我能如何使用QueryOver,没有公式字段下面。
我有以下父/子关系
公共类俱乐部{
公共字符串名称{;组;}
公众的IList<会员>成员{获得;组;}
}
公共类成员{
公共布尔取消{获得;组;}
市民俱乐部俱乐部{获得;组;}
}
我有以下的查询,返回15俱乐部并转换结果到DTO,我需要添加到该查询成员的行数属于每个俱乐部和未取消。
的IEnumerable< ClubIndexViewModelLineSummary>结果= _querySession.QueryOver<俱乐部>()
.OrderBy(C => c.IsActive).Desc
.OrderBy(C => c.Name).ASC
.SelectList(名单=>清单
。选择(C => c.Id).WithAlias(()=> sum.Id)
。选择(C => c.Name).WithAlias(()=> sum.Name)
。选择(C => c.IsActive).WithAlias(()=> sum.IsActive)
。选择(C => c.NumberOfWeeks).WithAlias(()=> sum.NumberOfWeeks))
.TransformUsing(Transformers.AliasToBean&其中; ClubIndexViewModelLineSummary>())
.Skip(开始)
。取(15)
.Future&其中; ClubIndexViewModelLineSummary>();
解决方案
在一些调查研究,这是生成的查询工作的:
俱乐部clubAlias = NULL;
IEnumerable的< ClubIndexViewModelLineSummary>结果=
_querySession.QueryOver<俱乐部>(()=> clubAlias)
.OrderBy(C => c.IsActive).Desc
.OrderBy(C => c.Name).ASC
.SelectList(名单=>清单
。选择(C => c.Id).WithAlias(()=> sum.Id)
。选择(C => c.Name).WithAlias(()=> sum.Name)
。选择(C => c.IsActive).WithAlias(()=> sum.IsActive)
。选择(C => c.NumberOfWeeks).WithAlias(()=> sum.NumberOfWeeks)
.SelectSubQuery
(
QueryOver.Of< ClubMembership>()
。凡(C => c.Canceled ==假)
。而(C => c.Club.Id == clubAlias.Id)
.ToRowCountQuery()
).WithAlias(()=> sum.ActiveMembers))
.TransformUsing(Transformers.AliasToBean&其中; ClubIndexViewModelLineSummary>())
.Skip(开始)
。取(15)
.Future&其中; ClubIndexViewModelLineSummary>();
How can I do the following using QueryOver and no Formula Fields.
I have the following parent/child relationship
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;}
}
I have the following query that returns 15 Clubs and transforms the results to a DTO, I need to add to this query a RowCount of Memberships that belong to each club and that are not Cancelled.
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>();
解决方案
After some more research, this is the resulting query that works:
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>();
这篇关于让孩子计数使用QueryOver NHibernate的限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文