gpt4 book ai didi

c# - QueryOver 查询中的重要顺序

转载 作者:行者123 更新时间:2023-11-30 15:44:27 25 4
gpt4 key购买 nike

我的查询是用 QueryOver api 构建的...现在的问题是我需要按一些需要在飞行中计算的特殊值对它进行排序...

我有我的产品表,我需要根据与某些特定坐标的距离对其进行排序。SQL 中的等价物看起来像 ORDER BY power(abs(p.x - @x),2) + power( abs(p.y - @y),2)

现在我不知道如何在 QueryOver 查询中编写它。有什么建议吗?

我很乐意提供任何帮助!

最佳答案

使用QueryOver这个有点问题,因为我们在使用SQL函数的时候需要用到Projections。

我删除了 abs(...),因为它不是必需的,因为 x * x == -x * -x

选项 1:使用 SqlProjection(不漂亮,但更短)

int x = 10;
int y = 20;

var result = session.QueryOver<Product>()
.OrderBy(Projections.SqlProjection(
@"power(x - " + x.ToString() + ", 2) + power(y - " + y.ToString() + ", 2) as tmporder",
new string[] { "test" },
new NHibernate.Type.IType[] { NHibernateUtil.Int32 })).Asc
.List();

选项 2:使用 SqlFunction - 这更长,需要查看以下链接:

类似这样的东西(您需要从链接中包含 OperatorProjection;它不完整,我没有测试它)

.OrderBy(Projections.SqlFunction("power", NHibernateUtil.Double,
new ArithmeticOperatorProjection("+", NHibernateUtil.Int32,
Projections.Property<Product>(p => p.x), Projections.Constant(x)),
Projections.Constant(2))).Asc

NHibernate and the missing OperatorProjection Part 1

关于c# - QueryOver 查询中的重要顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6073566/

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