gpt4 book ai didi

NHibernate QueryOver : Get a row count with group by in a subquery

转载 作者:行者123 更新时间:2023-12-03 15:52:23 28 4
gpt4 key购买 nike

我正在尝试从一个带有 group by 的查询中获取计数,但无法弄清楚如何将我想要的 SQL 转换为 NHibernate 的 QueryOver 语法。

这是 SQL:

select count(*) from
(select Email from Entry
where (conditions...)
group by Email) as tmp

看起来很简单吧?

这就是我尝试这样做的方式,但 RowCount() 调用似乎完全优化了组:
    var query = _unitOfWork.CurrentSession.QueryOver<ContestEntry>()
.Select(Projections.Property<ContestEntry>(x => x.Email),
Projections.Group<ContestEntry>(x => x.Email));

return query.RowCount();

我不介意为此使用 Criteria,但我对新的(对我而言)QueryOver API 感到兴奋,它让我摆脱了魔法字符串。

更新:

由于此应用程序在 SQL CE 上运行,因此我无法使用生成的 SQL 在计数内执行不同的查询(例如 select count(distinct Email))。

请参阅: http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/80a1d7dd-22be-4583-b8f2-fcd8cde5ec53/http://our.umbraco.org/wiki/install-and-setup/sql-server-ce-4-known-issues(“不支持计数不同”,大约在页面下方的 2/3)

最佳答案

我不确定您为什么需要如此复杂的查询。如果您只想要满足特定条件的不同电子邮件的数量,我认为您可以在 SQL 中使用这样的东西:

select count(distinct email)
from Entry
where (conditions...)

并将其转换为 NHibernate 的 QueryOver API 将如下所示:
int count = session.QueryOver<ContestEntry>()
.Select(Projections.CountDistinct<ContestEntry>(x => x.Email))
.FutureValue<int>()
.Value;//query is not executed until here

除非我遗漏了什么,我认为这会得到你想要的结果。还有一个“Distinct”投影和一个您可能会感兴趣的 .ToRowCountQuery() 方法。

关于NHibernate QueryOver : Get a row count with group by in a subquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5747718/

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