gpt4 book ai didi

.net - 在 NHibernate 中按公式字段排序

转载 作者:行者123 更新时间:2023-12-05 01:26:39 24 4
gpt4 key购买 nike

假设我有以下映射 formula属性(property):

<class name="Planet" table="planets">
<id name="Id" column="id">
<generator class="native" />
</id>

<!-- somefunc() is a native SQL function -->
<property name="Distance" formula="somefunc()" />
</class>

我想获取所有行星并通过 Distance 订购它们计算属性:
var planets = session
.CreateCriteria<Planet>()
.AddOrder(Order.Asc("Distance"))
.List<Planet>();

这被转换为以下查询:
SELECT Id as id0, somefunc() as formula0 FROM planets ORDER BY somefunc()

所需查询:
SELECT Id as id0, somefunc() as formula0 FROM planets ORDER BY formula0

如果我使用别名设置投影,它可以正常工作:
var planets = session
.CreateCriteria<Planet>()
.SetProjection(Projections.Alias(Projections.Property("Distance"), "dist"))
.AddOrder(Order.Asc("dist"))
.List<Planet>();

查询语句:
SELECT somefunc() as formula0 FROM planets ORDER BY formula0

但它只填充结果中的距离属性,我真的很想避免手动投影对象的所有其他属性(可能还有许多其他属性)。

这可以通过 NHibernate 实现吗?作为奖励,我想将参数传递给 native somefunc() SQL 函数。任何产生所需 SQL 的东西都是可以接受的(用子选择替换公式字段等...),重要的是在结果对象中计算距离属性,并在 SQL 中按此距离排序。

最佳答案

这两个在 SQL 中 100% 相同。为什么这有关系?

SELECT Id as id0, somefunc() as formula0 FROM planets ORDER BY somefunc()
SELECT Id as id0, somefunc() as formula0 FROM planets ORDER BY formula0

编辑,还是一样:

ORDER BY 子句将简单地重复 SELECT func 调用,无论是否别名
SELECT Id as id0, somefunc(1, 'fish') as formula0 FROM planets ORDER BY somefunc(1, 'fish')
SELECT Id as id0, somefunc(1, 'fish') as formula0 FROM planets ORDER BY formula0

关于.net - 在 NHibernate 中按公式字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968799/

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