Используя Linq to Sql, чтобы найти ZipCodes на расстоянии Радиуса - PullRequest
3 голосов
/ 30 октября 2009

У меня есть база данных почтовых индексов с их широтой / долготой. Я пытаюсь найти код, который показывает запрос, который принимает почтовый индекс и х миль, а затем возвращает набор результатов, который включает все почтовые индексы, которые находятся в пределах этого радиуса (точность не очень важна - пока она близка). 1001 *

Можно ли это сделать с помощью запроса Linq to SQL, поэтому мне не нужно использовать хранимую процедуру?

1 Ответ

1 голос
/ 31 октября 2009

Я понял это, и на самом деле это было не так уж сложно, когда я нашел уравнение.

Public Function SearchStudents(ByVal SearchZip As String, ByVal Miles As Double) As IEnumerable(Of Student)
                Dim dc As New IMDataContext()

                Dim lat As Double
                Dim lng As Double
                Dim maxlat As Double
                Dim minlat As Double
                Dim maxlng As Double
                Dim minlng As Double

                Dim zip As ZipCode = (From z In dc.ZipCodes Where z.ZipCode = SearchZip).SingleOrDefault()

                lat = zip.Latitude
                lng = zip.Longitude

                maxlat = lat + Miles / 69.17
                minlat = lat - (maxlat - lat)
                maxlng = lng + Miles / (Math.Cos(minlat * Math.PI / 180) * 69.17)
                minlng = lng - (maxlng - lng)

                Dim ziplist = From z In dc.ZipCodes Where z.Latitude >= minlat _
                       And z.Latitude <= maxlat _
                       And z.Longitude >= minlng _
                       And z.Longitude <= maxlng Select z.ZipCode

                Return From i In dc.Students Where ziplist.Contains(i.Zip)
            End Function
...