让孩子计数使用QueryOver NHibernate的限制 [英] Get children count with restrictions using QueryOver on NHibernate

查看:102
本文介绍了让孩子计数使用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.Alias​​ToBean&其中; 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.Alias​​ToBean&其中; 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆