Linq到NHibernate - 没有实现方法Cos

时间:2010-07-05 17:54:22

标签: 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 / 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();

不幸的是,似乎Linq到NHibernate不支持C#Math类,所以它给了我以下错误:

方法Cos未实施

我如何解决这个问题?

谢谢! 贾斯汀

2 个答案:

答案 0 :(得分:3)

你可以做三件事:

  1. 实施它并向NHibernate提交补丁,以便每个人都可以使用您的实现
  2. 创建一个失败的单元测试,隔离问题并将其提交给NHibernate Jira并等到其他人实现它。
  3. 不要使用Linq,而是使用普通的旧sql或混合hql进行此查询。
  4. 当您选择选项1时,您会让一些人感到高兴。

答案 1 :(得分:1)

您不能在服务器端Linq查询中使用任意.Net函数。

您可以将服务器端功能与HQL一起使用。