Linq到NHibernate-未实现Cos方法

Linq到NHibernate-未实现Cos方法,nhibernate,linq-to-nhibernate,Nhibernate,Linq To Nhibernate,在Linq to NHibernate中,我试图在用户一定距离内返回业务。以下是我到目前为止的情况: var query = from b in ActiveRecordLinq.AsQueryable<Business>() where (3959 * Math.Acos(Math.Cos((Math.PI * coordinates.Latitude / 180)) * Math.Cos((Math.PI * b.Latitude

在Linq to NHibernate中,我试图在用户一定距离内返回业务。以下是我到目前为止的情况:

var query = from b in ActiveRecordLinq.AsQueryable<Business>()
                        where (3959 * Math.Acos(Math.Cos((Math.PI * coordinates.Latitude / 180)) * Math.Cos((Math.PI * b.Latitude / 180))
                            * Math.Cos((Math.PI * b.Longitude / 180) - (Math.PI * coordinates.Longitude / 180))
                            + Math.Sin((Math.PI * coordinates.Latitude / 180)) * Math.Sin((Math.PI * b.Latitude / 180)))) <= radiusInMiles
                        orderby b.Name ascending
                        select b;
            return query.ToList();
var query=来自ActiveRecordLinq.AsQueryable()中的b
其中(3959*Math.Acos(Math.Cos((Math.PI*坐标.纬度/180))*Math.Cos((Math.PI*b.纬度/180))
*Math.Cos((Math.PI*b.经度/180)-(Math.PI*坐标.经度/180))

+Math.Sin((Math.PI*coordinates.Latitude/180))*Math.Sin((Math.PI*b.Latitude/180))不能在服务器端Linq查询中使用任意.Net函数


您可以在HQL中使用服务器端函数。

您可以做三件事:

  • 实现它并向NHibernate提交一个补丁,这样每个人都可以使用你的实现
  • 创建一个失败的单元测试来隔离问题,并将其提交给NHibernate Jira,等待其他人实现它
  • 对于此查询,不要使用Linq,而是使用普通的旧sql或混合hql

  • 当您选择选项1时,您会让一些人感到高兴。

    Linq to SQL支持数学函数,因此我认为它们不是任意的。您能举一个例子说明我如何使用HQL执行上述操作吗?HQL是否只是一个动态sql,您可以使用:?我正在处理这个问题,我只是希望避免这种方法。HQL不是SQL。它是一种面向对象的查询语言,语法非常类似于SQL,现在已经在3.3.3中实现了。