Bien que je lisais le livre de recettes NHibernate et tous FORUM- postes disponibles haut et en bas, je ne suis toujours pas en mesure d'obtenir cette requête simple fait:NHibernate QueryOver Somme au sein JoinQueryOver
je les utilisateurs avec tout le monde ayant un Compte. Chaque compte a un solde. Les classes ressemblent que:
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; }
}
Maintenant, je voudrais résumer l'équilibre de tous les utilisateurs actifs. Rien de plus ... en SQL il est assez facile:
SELECT SUM(a.Balance)
FROM User u
INNER JOIN Account a
ON u.Account_id = a.Id
WHERE u.Active = 'true'
Je n'ai aucune idée moi, comment je pouvais résoudre que le nouveau QueryOver-Api de NHibernate 3. Pourriez-vous s'il vous plaît fournir un code-exemple?
Merci d'avance!
Daniel Lang
EDIT
Je sais qu'avec NHibernate Linq il est très facile aussi, mais je voudrais le résoudre en utilisant QueryOver ... Voici le LINQ Exemple de travail:
var result = Session.Query<User>()
.Where(x => x.Active)
.Sum(x => x.Account.Balance)
SOLUTION
Merci à AlexCuse je pouvais trouver la solution finale (il était très proche) - voici le code complet:
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>()
Merci beaucoup! Vous avez juste tapé là - utilisez "accountAlias.Balance" au lieu de "acct.Balance". Voir ma modification ci-dessus. Les alias de n'importe où ont fait l'affaire! –
Ah, ce SingleOrDefault est ce que je cherchais. J'espère pouvoir m'en souvenir. Un acct.Balance surpris ne fonctionnerait pas mais peut-être que l'alias l'emporte sur ce qui est passé dans la projection. – AlexCuse