Linq 无法识别方法 GetDistanceTo

use*_*114 1 c# linq entity-framework

我有这个查询,我试图按距离排序。但是,linq 向我抛出一个错误,指出它无法识别 GetDistanceTo 方法。当删除 OrderBy 子句时,查询将起作用。

 var coord = new GeoCoordinate { Latitude = (double?)array.latitude ?? 0, Longitude = (double?)array.longitude ?? 0 };

 var property = db.Properties.Select(x => new SearchResultsViewModel
 {
      geocoord = new GeoCoordinate { Latitude = (double?)x.latitude ?? 0, Longitude = (double?)x.longitude ?? 0 }

 }).OrderBy(x=>x.geocoord.GetDistanceTo(coord)).ToList();
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 7

LINQ to Entities 必须将表达式转换为可针对数据库执行的 SQL 查询。它不知道如何转换GetDistanceTo成 SQL 查询。

您可以调用AsEnumerablebeforeOrderBy来强制将排序作为内存中 LINQ to Objects 查询执行。

 var property = db.Properties.Select(x => new SearchResultsViewModel
 {
      geocoord = new GeoCoordinate { Latitude = (double?)x.latitude ?? 0, Longitude = (double?)x.longitude ?? 0 }

 }).AsEnumerable().OrderBy(x=>x.geocoord.GetDistanceTo(coord)).ToList();
Run Code Online (Sandbox Code Playgroud)