linq - 使用 Linq 在 Order by 中进行数学计算

标签 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))

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

最佳答案

根本不需要平方根;按距离的平方排序与按距离排序相同:

.OrderBy(x => (x.Latitude - target.Latitude)*(x.Latitude - target.Latitude)
              + (x.Longitude - target.Longitude)*(x.Longitude - target.Longitude))

此技巧通常用于碰撞检测(例如视频游戏),以避免计算许多平方根。

关于linq - 使用 Linq 在 Order by 中进行数学计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6985883/

相关文章:

caching - 使用 Entity Framework 5 缓存查询

c# - FirstOrDefault() 的性能

vb.net - Linq 查询处理空值

c# - 使用 LINQ 嵌套查询获取更新的最新行

.net - Linq SqlMethods.Like 失败

c# - 从 Linq 查询创建 Dictionary<int, List<int>>

.net - Linq To 实体查询异常

c# - Linq 查询,弄乱了方法中的 where 子句

c# - 如何针对术语优化此 SharePoint 查询?

asp.net-mvc - LINQ to Entities无法识别方法异常