Я действительно не знаю LINQ, но, предполагая, что вы можете отправлять только простые ограничения в запросе, я бы сконструировал метод, который в основном делает обратное calDistance - взять координату и расстояние и преобразовать их в ограничивающую рамку с минимальной долготой, максимальной долготой, минимальной широтой и максимальной широтой.
Вы должны быть в состоянии создать простой запрос, который будет соответствовать вашим целям с этими ограничениями.
что-то вроде (используя Java здесь):
public double[] getCoordinateBounds(double distance, double longitude, double latitude) {
double[] bounds = new double[4];
bounds[0] = longitude - distanceToLongitudePoints * (distance);
bounds[1] = longitude + distanceToLongitudePoints * (distance);
bounds[2] = latitude - distanceToLatitudePoints * (distance);
bounds[3] = latitude + distanceToLatitudePoints * (distance);
return bounds;
}
Тогда вы могли бы построить запрос.
double[] bounds = getCoordinateBounds(distance, longi, lat);
var nearbyUserLocations = from a in db.Location
where longitude > bounds[0] and longitude < bounds[1]
and latitude > bounds[2] and latitude < bounds[3]
Это даст вам коробку точек, а не радиус точек, но будет достаточно нескольких точек, чтобы вы могли обработать их и выбросить те, которые находятся за пределами вашего радиуса. Или вы можете решить, что ящик достаточно хорош для ваших целей.