我有一个充满坐标 (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)));
我该如何优化它?
最佳答案
- 您不能计算 Math.Sqrt - 没关系(3 > 2 和 3*3 > 2*2)
- 您可以按距离排序并先取:
var closest = _context.Coordinates.OrderBy(x =>
Math.Pow((point.coordX - x.CoordX), 2) + Math.Pow((point.WinningCoordY - x.CoordY), 2))
.First();
- 此外,将 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/