使用LINQ to SQL来找到半径距离内邮编(Using Linq to Sql to find

2019-09-02 10:34发布

我有自己的纬度/多头邮编的数据库表。 我试图找到一些代码,显示了一个查询,需要一个邮政编码和X英里,然后返回结果集,包括所有都是半径内的邮编的(精度不是很重要 - 只要它很接近)。

这可以用一个LINQ可以做SQL查询,所以我不必使用存储过程?

Answer 1:

我想通了,它实际上并没有那么难,一旦我找到了方程。

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


文章来源: Using Linq to Sql to find ZipCodes within Radius distance