微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JoinQueryOver中的NHibernate QueryOver总和

如何解决JoinQueryOver中的NHibernate 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; }
}
现在,我想总结所有活跃用户的余额。而已... 在普通的sql中,这很容易:
SELECT SUM(a.Balance)
FROM User u
INNER JOIN Account a
ON u.Account_id = a.Id
WHERE u.Active = \'true\'
我没有任何想法,如何使用NHibernate 3的新QueryOver-Api来解​​决这个问题。能否请您提供一个代码示例? 先感谢您! 丹尼尔·朗(Daniel Lang) 编辑 我知道,使用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>()
    

解决方法

        你尝试过这样的事情吗?
session.QueryOver<User>(() => userAlias)
    .JoinAlias(() => userAlias.Account,() => accountAlias)
    .Where(() => userAlias.Active)
    .Select(Projections.Sum<Account>(acct => acct.Balance))
    .UnderlyingCriteria.UniqueResult()
我不确定QueryOver API中的UniqueResult是什么,因此必须通过基础条件。     ,        您在答案中写道:
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>()
您不需要通用类型的别名。它可能是:
Account accountAlias = null;

session.QueryOver<User>()
    .JoinAlias(user => user.Account,() => accountAlias)
    .Where(user => user.Active)
    .Select(Projections.Sum<Account>(acct => accountAlias.Balance))
    .SingleOrDefault<double>() 
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。