我对 NHibernate 相当陌生,到目前为止一切都进展顺利,但我遇到了一个问题,我不太确定如何解决。基本上我需要按用户定义函数的输出进行过滤。如果我用 SQL 编写,我会这样写:
declare @Latitude decimal
declare @Longitude decimal
declare @radius int
set @Latitude = -118.4104684
set @Longitude = 34.1030032
select *
from store
where dbo.CalculateDistance([Latitude], [Longitude], @Latitude, @Longitude) < @radius
我已经看到了我认为不合适的公式属性、命名查询和创建自己的方言扩展的示例(这似乎有点过头了)。我本以为有一种更直接的方法来做到这一点,但我似乎找不到一个简洁的例子。
您可以在 hibernate 查询中使用 SQL 表达式。假设您已经映射了Store
输入您可以编写以下查询:
var result = session
.CreateCriteria<Store>()
.Add(Expression.Sql(
"dbo.CalculateDistance({alias}.Latitude, {alias}.Longitude, ?, ?) < ?",
new object[] {
-118.4104684d,
34.1030032d,
100
},
new IType[] {
NHibernateUtil.Double,
NHibernateUtil.Double,
NHibernateUtil.Int32
}
))
.List<Store>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)