Linq无法识别方法GetDistanceTo

时间:2015-08-21 00:30:24

标签: 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();

1 个答案:

答案 0 :(得分:4)

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

您可以在AsEnumerable之前调用OrderBy以强制执行作为内存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();