Utilisation de Linq vers SQL pour trouver des codes postaux à une distance de rayon

StackOverflow https://stackoverflow.com/questions/1647521

  •  22-07-2019
  •  | 
  •  

Question

J'ai une table de base de données de codes zip avec leur lat / long. J'essaie de trouver un code qui montre une requête qui prend un code postal et x miles, puis renvoie un ensemble de résultats incluant tous les codes postaux situés dans ce rayon (la précision n'a aucune importance, tant qu'elle est proche).

Cela peut-il être fait avec une requête Linq vers SQL afin que je n'ai pas à utiliser de procédure stockée?

Était-ce utile?

La solution

Je l'ai compris et ce n'était pas si difficile une fois que j'ai trouvé l'équation.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top