Фон
Я пишу приложение, которое находит события в определенном радиусе почтового индекса. Вы можете думать об этом, как ticketmaster, где вы вводите свой почтовый индекс, и все концерты в радиусе x отображаются.
У меня есть таблица базы данных, в которой есть почтовый индекс, и каждый почтовый индекс "Широта и долгота". У меня также есть таблица EventListings, где каждое "событие" имеет поле ZipCode.
Проблема
В настоящее время я использую формулу Haversine в запросе Linq-to-Entities на моем уровне сервиса, чтобы определить, какие события находятся в радиусе. Прямо сейчас, я использую его как фильтр в предложении where. Я также хотел бы разместить его в предложении select, поэтому на веб-сайте я могу показать "это в 4,6 км" и т.д.
Я не могу переместить этот код в отдельный метод С#, потому что Linq-to-Entities будет жаловаться, что он не сможет преобразовать его в sql, так что это оставляет меня с дублированием всей формулы в инструкции select. Это очень уродливо. Я попытался это исправить.
Что я пробовал
Я редактировал Entity и добавил специальное скалярное свойство "DistanceFromOrigin". Затем я создал хранимую процедуру, которая вернула все данные сущности, а также твердое кодированное значение (для целей тестирования) для нового поля "DistanceFromOrigin".
Затем я понял, что я не могу сказать сущностной структуре использовать мой sproc для своего оператора select в объекте EventListings... Фил предложил пространственные данные, поэтому я пошел с ним.
Вопрос
Как я могу использовать Spatials для поиска событий в радиусе почтовых индексов?