LINQ实体中仅支持无参数构造函数和初始值设定项

时间:2015-05-19 22:36:49

标签: linq entity-framework

我使用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中仅支持无参数构造函数和初始值设定项。

有人可以解释为什么会失败吗?

1 个答案:

答案 0 :(得分:2)

实体框架尝试将您的LINQ查询转换为可以针对数据库执行的SQL查询。因此,您无法在查询中使用GeoCoordinate

即使构造函数工作Convert.ToDouble,调用也会失败,因为它也无法转换为SQL。

您可能希望在SQL和实体框架中使用Spatial Data

或者你可能想编写自己的Haversine formula版本(这是{1}}在你的LINQ查询中使用的版本。实体框架应该很好地处理数学。