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