我如何使用 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,我需要向此查询添加 RowCount属于每个俱乐部且未被取消的成员(member)资格。

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


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!