我的数据库中有坐标(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)));
我如何优化这个?
答案 0 :(得分:5)
var closest = _context.Coordinates.OrderBy(x =>
Math.Pow((point.coordX - x.CoordX), 2) + Math.Pow((point.WinningCoordY - x.CoordY), 2))
.First();
var closest = _context.Coordinates.OrderBy(x =>
(point.coordX - x.CoordX) * (point.coordX - x.CoordX) + (point.WinningCoordY - x.CoordY) * (point.WinningCoordY - x.CoordY))
.First();
答案 1 :(得分:3)
您可以使用分组。此外,您不必计算平方根。你可以只使用相应差异的平方和。
使用GroupBy
,您可以构建一系列组,其关键是每个组的点与您感兴趣的点之间的距离。然后,您基于OrderBy
组创建关键的价值。最后你选择了第一组。这包含您要查找的分数。
var closest = _context.Coordinates
.GroupBy(x => Math.Pow((point.coordX - x.CoordX), 2) + Math.Pow((point.WinningCoordY - x.CoordY), 2))
.OrderBy(x=>x.Key)
.First();