gpt4 book ai didi

JoinQueryOver 中的 NHibernate QueryOver Sum

转载 作者:行者123 更新时间:2023-12-03 11:26:47 26 4
gpt4 key购买 nike

尽管我上下阅读了 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 解决这个问题。你能提供一个代码示例吗?

先感谢您!

丹尼尔·朗

编辑
我知道,使用 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 等价物是什么,因此必须通过底层标准。

关于JoinQueryOver 中的 NHibernate QueryOver Sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com