我有这个查询,我试图按距离排序。但是,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();
答案 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();