c# - LINQ 找到最近的坐标

标签 c# linq entity-framework

我有一个充满坐标 (x,y) 的数据库,我希望找到最接近某个点的坐标。 (可以有多个最接近这个点)

我已经写了这 2 个 LINQ,但肯定有一种比遍历数据库两次更聪明的方法:

var closestDistance = _context.Coordinates.Min(x =>
                          Math.Sqrt(Math.Pow((point.coordX - x.CoordX), 2) +
                                    Math.Pow((point.coordY- x.CoordY), 2)));
var closest = _context.Coordinates.Where(x=> closestDistance ==
                          Math.Sqrt(Math.Pow((point.coordX - x.CoordX), 2) +
                                    Math.Pow((point.coordY - x.CoordY), 2)));

我该如何优化它?

最佳答案

  1. 您不能计算 Math.Sqrt - 没关系(3 > 2 和 3*3 > 2*2)
  2. 您可以按距离排序并先取:

var closest = _context.Coordinates.OrderBy(x =>
               Math.Pow((point.coordX - x.CoordX), 2) + Math.Pow((point.WinningCoordY - x.CoordY), 2))
             .First();
  1. 此外,将 Math.Pow 替换为乘法 - 它会快得多:

var closest = _context.Coordinates.OrderBy(x =>
               (point.coordX - x.CoordX) * (point.coordX - x.CoordX) + (point.WinningCoordY - x.CoordY) * (point.WinningCoordY - x.CoordY))
             .First();

关于c# - LINQ 找到最近的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32203770/

相关文章:

C# 到 Ruby sha1 base64 编码

c# - ASP.NET EF6 查询模型

大数的 C# linq Sum() 扩展

entity-framework - 使用 Postgresql 和 Npgsql 的 Entity Framework

C# Entity Framework 6 MySQL - 插入 ApplicationUser_Id 时引用的未知列

c# - C# 用户控件中的图形问题 - 调整大小会遮挡组件

c# - 多表不带时间的日期格式(使用GridView)

c# - COPY失败:构建上下文之外的禁止路径:../API.Common.AspNetCore/API.Common.AspNetCore.csproj()

c# - List<T> 是常量、表达式参数还是表达式树中的其他内容?

visual-studio - 对Get-Migrations的输出进行升序排序?