实体数学无法识别方法';Double Acos(Double)';
本文关键字:Double Acos 方法 识别 实体 | 更新日期: 2023-09-27 17:59:43
我有一个实体代码给我带来了问题,它不会给出错误,直到我加载页面,然后错误显示。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
)。