我有这个实体代码给了我一些问题,在我加载页面然后错误说明之前它没有给出错误。 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();
答案 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
。