0

我有这个实体代码给我带来了问题,在我加载页面然后错误提示之前它不会给出错误。 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();
4

1 回答 1

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, afloat可以隐式提升为 a double)。

于 2013-02-22T22:00:19.190 回答