Выполнение математических вычислений в порядке с помощью Linq - PullRequest
2 голосов
/ 08 августа 2011

Я довольно новичок в Linq для Entity и у меня возникли некоторые проблемы.

Вот мой репозиторий поиска:

 public static List<Centre> Search(Search search)
 {
    using (var context = new MeetingRoomsContext())
    {
        var query = context.Centres
                .Include("Geo")
                .OrderBy( NEED HELP WITH THIS PART )

        return query.ToList();
    }
 }

Я получаю объект поиска, который содержит координаты, подобные этой:

Search.LongLat = "(-6.265275, 53.334442)"

Мне нужно разобраться с этим и выполнить некоторые математические операции с координатами в БД, чтобы упорядочить результаты по ближайшей к искомой точке для первой.

В математическомВ терминах это будет Пифагор:

squareRootOf((difference in latitude * difference in latitude) + 
             (difference in longitude * difference in longitude))

На самом деле понятия не имею, как это сделать.Любая помощь очень ценится

Ответы [ 2 ]

4 голосов
/ 08 августа 2011

Квадратный корень вообще не нужен;упорядочение по квадрату расстояния аналогично упорядочению по расстоянию:

.OrderBy(x => (x.Latitude - target.Latitude)*(x.Latitude - target.Latitude)
              + (x.Longitude - target.Longitude)*(x.Longitude - target.Longitude))

Этот прием часто используется при обнаружении столкновений (например, в видеоиграх), чтобы избежать необходимости вычислять много квадратных корней.

0 голосов
/ 08 августа 2011

Как насчет реализации вашего собственного IComparer, который вычисляет этот квадратный корень пифагорейца? Тогда OrderBy автоматически сравнит это.
См. этот пост для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...