2013-02-17 76 views
0

我有這個實體代碼給我的問題,它沒有給出錯誤,直到我加載頁面,然後錯誤說。 LINQ to Entities無法識別方法'Double Acos(Double)'方法,並且此方法無法轉換爲存儲表達式 我正在做haversine函數來獲取點的半徑,我知道Math返回a Double那就是爲什麼我投了它,我必須使用浮動,因爲這是CSV文件的唯一格式,我如何糾正上述錯誤?實體數學不能識別方法'Double Acos(Double)'

var ste = (from s in db.zipss where Math.Acos(Math.Sin(28.46348) 
* Math.Sin((float)s.latitude) + Math.Cos(28.46348) * Math.Cos((float)s.longitude - 
(-81.3881))) * 3960 <= 5 select s.zipcode).FirstOrDefault(); 
+1

創建一個變量,將該值設置爲您的數學,然後使用該變量。 [重複](http://stackoverflow.com/questions/7259567/linq-to-entities-does-not-recognize-the-method) – MikeSmithDev 2013-02-17 22:19:24

回答

0

對於LINQ to Entities,表達式無法翻譯。由於沒有其他的解決方案已被提出,我想你總是可以做查詢在內存中,即去LINQ到對象,如:

var ste = (from s in db.zipss.AsEnumerable() // note AsEnumerable 
      where Math.Acos(Math.Sin(28.46348) * Math.Sin((float)s.latitude) 
       + Math.Cos(28.46348) * Math.Cos((float)s.longitude - (-81.3881))) 
       * 3960 <= 5 
      select s.zipcode).FirstOrDefault(); 

我不知道這是否會成爲現實太慢。我不知道演員陣容是float。也許你可以省略它們(如果.latitude.longitude已經是float,則float可以隱含地提升爲double)。

相關問題