Хотя я читал «Поваренную книгу NHibernate» и все доступные посты на форуме вверх и вниз, я все еще не смог выполнить этот простой запрос:
У меня есть пользователи, у каждого из которых есть одна учетная запись.У каждого аккаунта есть баланс.Классы выглядят так:
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'
У меня нет никаких идей, как я могу решить эту проблему с новым QueryOver-Api от NHibernate 3. Не могли бы вы предоставитьпример кода?
Заранее спасибо!
Даниэль Ланг
EDIT Я знаю, что с NHibernate Linq это тоже очень просто, но я бы хотел решить эту проблему с помощью QueryOver ... Вот рабочий пример Linq:
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>()