实体数学无法识别方法'Double Acos(Double)'

时间:2013-02-17 22:17:08

标签: c# asp.net-mvc-3 linq floating-point

我有这个实体代码给了我一些问题,在我加载页面然后错误说明之前它没有给出错误。 LINQ to Entities无法识别方法'Double Acos(Double)'方法,并且此方法无法转换为商店表达式 我正在使用hasrsine函数来获取一个点的半径,我知道Math返回 Double 这就是我为什么要使用它而我必须使用浮点数,因为这是CSV文件所在的唯一格式,我该如何纠正上述错误?

 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 个答案:

答案 0 :(得分:0)

对于LINQ to Entities,无法翻译表达式。由于没有提出其他解决方案,我猜你总是可以在内存中进行查询,即转到LINQ to Objects,如:

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