7

如何使用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属于每个俱乐部且未取消的会员资格。

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

1 回答 1

10

经过更多研究,这是有效的查询结果:

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>();
于 2011-06-14T14:47:57.947 回答