6
虽然我是通过NHibernate的食谱和所有可用的论坛,帖子读取上下,我还是没能得到这样做了简单的查询:NHibernate的QueryOver总和内JoinQueryOver
我有用户具有一个大家帐户。每个帐户都有一个余额。 的类看起来像:
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.请您提供代码例子吗?
预先感谢您!
丹尼尔·兰
编辑
我知道,与NHibernate的LINQ是很容易过,但我想它使用QueryOver解决......这里是工作的LINQ示例:
var result = Session.Query<User>()
.Where(x => x.Active)
.Sum(x => x.Account.Balance)
SOLUTION
感谢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>()
非常感谢!你只是在那里打字 - 使用“accountAlias.Balance”而不是“acct.Balance”。看到我上面的编辑。任何别名都有诀窍! – 2011-06-17 17:59:45
啊,SingleOrDefault就是我一直在寻找的东西。希望我能记住它。惊讶的acct.Balance不会工作,但也许别名会超过传递给投影的任何东西。 – AlexCuse 2011-06-17 19:54:46