結合はで十分簡単.Join()
です。マッピングでこれらの関係を定義している場合は、結合の方法を指定する必要もありません。
私は通常、を使用する方が便利だと思いますJoinAlias
。集計はを使用して行われProjections
ます(エイリアスとプロジェクションはこちらをご覧ください)。
もちろん、単純な合計予測とグループ化予測が必要になります。
結果として、を使用しobject []
てキャストするか(上記のリンクのように)、カスタムDTOを定義してを使用することができますAliasToBeanResultTransformer
。(これはかなり古いブログ投稿です。ラムダ式を使用できるように構文が変更されました)。
上位15%について-よくわかりません。
QueryOver().Take()
定数を可能にします。パーセンテージのネイティブサポートがあるかどうかはわかりません。
ただし、独自のプロジェクションを実装することもできます。ここを参照してください。
編集:簡単な投影例
私はどれほど怠惰になることができますか?これをgithubからコピーしました。
結合、エイリアス、プロジェクションなど、必要なものがすべて揃っています。楽しみのためにSUMプロジェクションを追加しました。
もちろん、他のすべてのプロパティをグループ化する必要があることに注意してください。
Customer customer = null;
Employee employee = null;
OrderHeader orderHeader = null;
var orderHeaders = Session.QueryOver<Order>()
.JoinAlias(o => o.Customer, () => customer)
.JoinAlias(o => o.Employee, () => employee)
.SelectList(list => list
.SelectGroup(o => o.OrderedOn).WithAlias(() => orderHeader.OrderedOn)
.SelectGroup(o => customer.Name).WithAlias(() => orderHeader.Name)
.SelectGroup(o => employee.FirstName).WithAlias(() => orderHeader.FirstName)
.SelectGroup(o => employee.LastName).WithAlias(() => orderHeader.LastName)
.SelectSum(o => employee.Salary).WithAlias(() => orderHeader.JhonnysProjectionExample))
.TransformUsing(Transformers.AliasToBean<OrderHeader>())
.List<OrderHeader>();