A pesar de que estaba leyendo a través del NHibernate libro de cocina y todas foro postes disponibles arriba y hacia abajo, todavía no soy capaz de obtener esta consulta simple hecho:NHibernate QueryOver Suma dentro JoinQueryOver
tengo los usuarios con todo el mundo tener una cuenta. Cada cuenta tiene un equilibrio. Las clases que se ven como:
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; }
}
Ahora me gustaría resumir el equilibrio de todos los usuarios activos. Nada más ... En SQL llanura es bastante fácil:
SELECT SUM(a.Balance)
FROM User u
INNER JOIN Account a
ON u.Account_id = a.Id
WHERE u.Active = 'true'
que no tienen ninguna idea que, cómo podría resolver que con la nueva QueryOver-Api de NHibernate 3. ¿Podrían presentar una código-ejemplo?
¡Gracias de antemano!
Daniel Lang
EDITAR
que sé, que con NHibernate LINQ es muy fácil también, pero me gustaría resolverlo utilizando QueryOver ... Aquí está el trabajo LINQ Ejemplo:
var result = Session.Query<User>()
.Where(x => x.Active)
.Sum(x => x.Account.Balance)
SOLUCIÓN
Gracias a AlexCuse que pude encontrar la solución final (estaba muy, muy cerca) - aquí está el código completo:
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>()
¡Muchas gracias! Acabas de escribir error: usa "accountAlias.Balance" en lugar de "acct.Balance". Ver mi edición arriba. ¡Los alias en cualquier lugar hicieron el truco! –
Ah, eso SingleOrDefault es lo que estaba buscando. Espero poder recordarlo. Acct sorprendido. El balance no funcionaría, pero tal vez el alias prevalezca sobre lo que pase en la proyección. – AlexCuse