【问题标题】:LINQ Only parameterless constructors and initializers are supported in LINQ to EntitiesLINQ 在 LINQ to Entities 中仅支持无参数构造函数和初始化程序
【发布时间】:2015-07-31 23:20:16
【问题描述】:

我在下面的查询中遇到错误,使用 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 entity-framework


    【解决方案1】:

    Entity Framework 尝试将您的 LINQ 查询转换为可以对数据库执行的 SQL 查询。因此,您不能在查询中使用GeoCoordinate

    即使构造函数工作 Convert.ToDouble 调用也会失败,因为它也不能被翻译成 SQL。

    您可能想研究在 SQL 和实体框架中使用 Spatial Data

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

    【讨论】:

    • 您能建议我如何使用 GeoCoordinate 和 GetDistanceTo 吗?谢谢
    • 您必须将所有数据从数据库中获取到应用程序内存中,并将您的查询作为 Linq to Objects 查询运行。你很可能不想这样做。
    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多