我使用EF + LINQ
使用下面的查询收到错误 var model = (from c in _db.Accounts
let geo = new GeoCoordinate(Convert.ToDouble(c.Latitude.Value), Convert.ToDouble(c.Longitude.Value))
where ((geo.GetDistanceTo(CurrentCoord) / 1000) < 3)
orderby c.Name
select new CompanyVM
{
Name = c.Name,
...
}).ToList();
运行时错误:
LINQ to Entities中仅支持无参数构造函数和初始值设定项。
有人可以解释为什么会失败吗?
答案 0 :(得分:2)
实体框架尝试将您的LINQ查询转换为可以针对数据库执行的SQL查询。因此,您无法在查询中使用GeoCoordinate
。
即使构造函数工作Convert.ToDouble
,调用也会失败,因为它也无法转换为SQL。
您可能希望在SQL和实体框架中使用Spatial Data。
或者你可能想编写自己的Haversine formula版本(这是{1}}在你的LINQ查询中使用的版本。实体框架应该很好地处理数学。