gpt4 book ai didi

.net - NHibernate调用PostgresSQL的SELECT DISTINCT ON()

转载 作者:行者123 更新时间:2023-11-29 12:28:04 25 4
gpt4 key购买 nike

在问这个问题之前,我用谷歌搜索了一段时间,但找不到关于这个主题的任何相关信息。

我的问题很简单:

我有 NHibernate 标准和投影,我正在尝试设置 DISTINCT ON(column)

我的投影代码如下:

        criteria.SetProjection(
Projections.ProjectionList()
.Add(Projections.Distinct(Projections.Property("ID")))
.Add(Projections.Property("A"))
.Add(Projections.Property("B"))
);

这会生成以下 SQL(稍微简化):

SELECT DISTINCT ID, A, B FROM ABC ORDER BY A

但不幸的是,如果这个查询的性能非常非常差。

我已经优化了运行速度更快的 SQL,如下所示:

SELECT DISTINCT ON (A) ID, A, B FROM ABC ORDER BY A

无论如何,我可以让 NHibernate 生成我刚才展示的 SQL 吗?这个问题可以用 NHibernate 的方言解决吗?

期待您的反馈!非常感谢!

最佳答案

无论如何,这都不是最优雅的解决方案,但我想知道您是否可以通过使用“SQLProjection”来完成所需的工作?我是一个 Java 专家,所以这里的代码可能不完全正确,但是下面的方法看起来对我使用 Postgres 很有效:

criteria.SetProjection(
Projections.ProjectionList()
.Add(Projections.SqlProjection("DISTINCT ON(A) ID"))
.Add(Projections.Property("A"))
.Add(Projections.Property("B"))
);

它会生成您在问题中给出的优化 SQL 查询。同样,如果您正在做一些高度动态的事情,这种方法可能行不通,但它是解决问题的一种方法。

关于.net - NHibernate调用PostgresSQL的SELECT DISTINCT ON(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1799349/

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