C # linq SqlGeography — поиск местоположений в пределах 50 м по широте и долготе

#linq-to-entities #geocoding #latitude-longitude

#linq-to-entities #геокодирование #широта-долгота

Вопрос:

У меня lat и long в базе данных SQL хранятся как ‘float’

Я пытаюсь выполнить следующее, где широта и lng в C # двойные

 var yourLocation = SqlGeography.Point(lat, lng, 4326);
MyConn conn = new MyConn();
var query = from p in conn.Locations
           let distance = SqlGeography
            .Point(p.Latitude, p.Longitude, 4326)
            .STDistance(yourLocation)
            .Value
             where distance <= 50
select p;
return query.Distinct().ToList();
  

Все, что я получаю, это следующая ошибка

LINQ для объектов не распознает метод ‘System.Data.SqlTypes.SqlDouble STDistance (Microsoft.SQLServer.Типы.метод SqlGeography)’, и этот метод не может быть преобразован в выражение хранилища.

Есть мысли по этому поводу??

Ответ №1:

Взгляните на этот поток. Я не знаю о каких-либо исправлениях в EF4, но это не значит, что они его не исправляли.

Здесь также есть статья о поведении entity framework с пространственными типами.

Надеюсь, это поможет

Ответ №2:

Слишком поздно отвечать на этот вопрос, но нужна помощь сообщества. Эта проблема возникает из-за Microsoft.SQLServer.В вашем проекте нет ссылок на типы. просто щелкните правой кнопкой мыши по ссылке и выберите добавить ссылку, появится диалоговое окно выберите вкладку сборки и найдите эту сборку и выберите. Проблема решена.