我对Linq to Entity很新,遇到了一些麻烦。
这是我的搜索存储库:
public static List<Centre> Search(Search search)
{
using (var context = new MeetingRoomsContext())
{
var query = context.Centres
.Include("Geo")
.OrderBy( NEED HELP WITH THIS PART )
return query.ToList();
}
}
我收到的搜索对象包含这样的坐标:
Search.LongLat = "(-6.265275, 53.334442)"
我需要打破这一点并对数据库中的坐标进行一些数学计算,以便通过最接近搜索点的结果来排序结果。
在数学术语中,它将是毕达哥拉斯:
squareRootOf((difference in latitude * difference in latitude) +
(difference in longitude * difference in longitude))
真的不知道如何做到这一点。任何帮助都非常感激
答案 0 :(得分:4)
根本不需要平方根;按距离的平方排序与按距离排序相同:
.OrderBy(x => (x.Latitude - target.Latitude)*(x.Latitude - target.Latitude)
+ (x.Longitude - target.Longitude)*(x.Longitude - target.Longitude))
此技巧通常用于碰撞检测(例如视频游戏),以避免计算多个平方根。
答案 1 :(得分:0)
如何实现自己计算毕达哥拉根平方根的IComparer?然后OrderBy将自动比较。
有关示例,请参阅this post。