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



我有一个实体代码给我带来了问题,它不会给出错误,直到我加载页面,然后错误显示。LINQ to Entities不识别方法"Double Acos(Double)"方法,并且此方法无法转换为存储表达式我正在使用haversine函数来获取点的半径,我知道Math返回一个Double,这就是为什么我对它进行了强制转换,并且我必须使用float,因为这是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();

对于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)。

最新更新