2012-09-11 103 views
0

尝试在NHibernate QueryOver中实现以下查询。动态添加投影到NHibernate查询

SQL

SELECT 
    SUM(GrossChargeAmount) 
FROM Charges 
INNER JOIN Account on Account.Chargekey = Charges.Chargekey 

SELECT 
    SUM(GrossChargeAmount), 
    Account.AccountHolder 
FROM Charges 
INNER JOIN Account on Account.Chargekey = Charges.Chargekey 
GROUP BY 
    Account.AccountHolder 

NHibernate的:

var accountAlias = null; 

var baseQuery = session.QueryOver<Charges>() 
       .JoinAlias(c => c.Account,() => accountAlias) 
       .SelectList(s => s.SelectSum(c => c.GrossChargeAmount)) 

我有一个构建baseQuery代码。我然后根据方法的参数将要追加GROUP BY到像baseQuery:

baseQuery.SelectList(s => s.GroupBy(() => accountAlias.AccountHolder) 

然而,这结束了复位我baseQuery预测,基本上“overwritting”的初步预测(.SelectList(S => s.SelectSum(c => c.GrossChargeAmount)))。在这个阶段,查询的执行不会有任何SUM()bu只是GROUP BY。

TLDR;如何将投影添加到Nhibernate QueryOver实例?

最后,但并非最不重要,我NHibernate的运行2.0.50727

+0

有没有例如NHibernate 2.0.50727 –

回答

0

尝试:

baseQuery.SelectList(s => 
    s.SelectSum(c => c.GrossChargeAmount) 
    .GroupBy(() => accountAlias.AccountHolder)) 

你也可以建立在传递给的SelectList表达,如果你喜欢

+0

最后,我最终维护了一个IList ,我将它传递给了baseQuery.Select()。谢谢! – Alex