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 に答える