Dan*_*ang 6 nhibernate join aggregate queryover
虽然我正在阅读NHibernate Cookbook以及所有可用的论坛帖子,但我仍然无法完成这个简单的查询:
我有每个人都有一个帐户的用户.每个帐户都有余额.这些类看起来像这样:
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; }
}
Run Code Online (Sandbox Code Playgroud)
现在我想总结所有活跃用户的平衡.没有更多......在简单的SQL中它很容易:
SELECT SUM(a.Balance)
FROM User u
INNER JOIN Account a
ON u.Account_id = a.Id
WHERE u.Active = 'true'
Run Code Online (Sandbox Code Playgroud)
我没有任何想法,我怎么能用NHibernate 3的新QueryOver-Api解决这个问题.你能提供一个代码示例吗?
先感谢您!
丹尼尔朗
编辑
我知道,使用NHibernate Linq它也很容易,但我想用QueryOver解决它...这是工作Linq-示例:
var result = Session.Query<User>()
.Where(x => x.Active)
.Sum(x => x.Account.Balance)
Run Code Online (Sandbox Code Playgroud)
解决方案
感谢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>()
Run Code Online (Sandbox Code Playgroud)
你尝试过这样的事吗?
session.QueryOver<User>(() => userAlias)
.JoinAlias(() => userAlias.Account, () => accountAlias)
.Where(() => userAlias.Active)
.Select(Projections.Sum<Account>(acct => acct.Balance))
.UnderlyingCriteria.UniqueResult()
Run Code Online (Sandbox Code Playgroud)
我不确定QueryOver API中的UniqueResult等价物是什么,因此必须通过基础标准.