2010-07-05 91 views
4

在Linq到NHibernate我試圖返回一定距離內的用戶。以下是我迄今爲止:Linq到NHibernate - 方法Cos沒有實現

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(); 

遺憾的是,似乎這樣它給了我下面的錯誤的C#數學類不Linq中支持NHibernate的:

方法的Cos不實施

我該如何解決這個問題?

謝謝! Justin

回答

3

你可以做三件事情:

  1. 實現它,並提交一個補丁,NHibernate的,這樣每個人都可以使用您的實現
  2. 創建一個失敗的單元測試來隔離問題,並提交給NHibernate的吉拉和等到其他人實現它。
  3. 請勿使用Linq,而是使用普通的舊sql或混合hql進行此查詢。

您會讓一些人高興的時候,你選擇的選項1.

+0

HQL只是您使用以下參數注入參數的動態sql:?我有這個工作,我只是希望避免這種方法。 – Justin 2010-07-05 22:44:15

+0

HQL不是SQL。它是一種面向對象的查詢語言,語法非常類似於SQL。 – 2010-07-06 00:21:20

+0

現已在3.3.3中實施。 https://nhibernate.jira.com/browse/NH-3092 – 2013-03-26 14:39:00

1

您不能在服務器端Linq查詢中使用任意.Net函數。

您可以在HQL中使用服務器端函數。

+0

LINQ到SQL支持的數學函數,所以我不認爲他們是隨意的。你能舉一個例子說明如何用HQL來完成上述任務嗎? – Justin 2010-07-05 22:41:59