sir*_*ius 3 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)));
Run Code Online (Sandbox Code Playgroud)
我该如何优化呢?
var closest = _context.Coordinates.OrderBy(x =>
Math.Pow((point.coordX - x.CoordX), 2) + Math.Pow((point.WinningCoordY - x.CoordY), 2))
.First();
Run Code Online (Sandbox Code Playgroud)
var closest = _context.Coordinates.OrderBy(x =>
(point.coordX - x.CoordX) * (point.coordX - x.CoordX) + (point.WinningCoordY - x.CoordY) * (point.WinningCoordY - x.CoordY))
.First();
Run Code Online (Sandbox Code Playgroud)
您可以使用 group by。此外,您不必计算平方根。您可以只使用相应差异的平方和。
使用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();
Run Code Online (Sandbox Code Playgroud)