我得到一个错误使用下面的查询,使用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只支持无参数构造函数和初始化式。
有人能解释一下为什么它失败了吗?
实体框架试图将您的LINQ查询转换为可以对数据库执行的SQL查询。因此,您不能在查询中使用GeoCoordinate
。
即使构造函数工作,Convert.ToDouble
调用也会失败,因为它也不能转换为SQL。
你可以考虑在SQL和实体框架中使用空间数据。
或者你可能想写你自己的版本的哈弗斯公式(这是一个使用的GetDistanceTo
在你的LINQ查询。实体框架应该能很好地处理数学