私はNHibernateクックブックと利用可能なすべてのフォーラム投稿を上下に読んでいましたが、この単純なクエリを実行することはまだできません:
全員が 1 つのアカウントを持つユーザーがいます。各口座には残高があります。クラスは次のようになります。
public class User
{
public virtual int Id { get; set; }
public virtual Account Account { get; set; }
public virtual bool Active { get; set; }
}
public class Account
{
public virtual int Id { get; set; }
public virtual double Balance { get; set; }
}
ここで、すべてのアクティブ ユーザーの残高を合計したいと思います。それ以上はありません...プレーンSQLでは非常に簡単です:
SELECT SUM(a.Balance)
FROM User u
INNER JOIN Account a
ON u.Account_id = a.Id
WHERE u.Active = 'true'
NHibernate 3 の新しい QueryOver-Api を使用してどのように解決できるかわかりません。コード例を教えてください。
前もって感謝します!
ダニエル・ラング
EDIT
NHibernate Linqでも非常に簡単ですが、QueryOverを使用して解決したいと思います...これが実際のLinq-Exampleです。
var result = Session.Query<User>()
.Where(x => x.Active)
.Sum(x => x.Account.Balance)
ソリューション
AlexCuse のおかげで、私は最終的な解決策を見つけることができました (彼は非常に近いものでした) - 完全なコードは次のとおりです。
User userAlias = null;
Account accountAlias = null;
session.QueryOver<User>(() => userAlias)
.JoinAlias(() => userAlias.Account, () => accountAlias)
.Where(() => userAlias.Active)
.Select(Projections.Sum<Account>(acct => accountAlias.Balance))
.SingleOrDefault<double>()