使用Linq按顺序进行数学计算

时间:2011-08-08 17:14:18

标签: linq linq-to-entities

我对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))

真的不知道如何做到这一点。任何帮助都非常感激

2 个答案:

答案 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