动态添加投影到 NHibernate 查询

Posted

技术标签:

【中文标题】动态添加投影到 NHibernate 查询【英文标题】:Dynamically add projections to NHibernate query 【发布时间】:2012-09-11 15:02:58 【问题描述】:

尝试在 NHibernate QueryOver 中实现以下查询。

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 上的投影,并基本上“覆盖”初始投影( .SelectList(s => s.SelectSum(c => c.GrossChargeAmount)) )。在这个阶段,查询的执行除了 GROUP BY 之外没有任何 SUM()。

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

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

【问题讨论】:

没有 NHibernate 2.0.50727 这样的东西 【参考方案1】:

尝试:

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

如果您愿意,也可以构建传递给 SelectList 的表达式

【讨论】:

最后,我维护了一个传递给 baseQuery.Select() 的 IList。谢谢!

以上是关于动态添加投影到 NHibernate 查询的主要内容,如果未能解决你的问题,请参考以下文章

在 NHibernate 中动态更改查询类型

如何在 NHibernate 中使用 sql 查询创建表?

将静态列添加到动态 LINQ 查询

现在 ASP.NET 动态数据与 Nhibernate 的工作情况如何?

在 iOS 应用中为动态下载的图像添加样式

如何将动态参数添加到 graphql 查询中