使用LINQ to SQL来找到半径距离内邮政编码
-
22-07-2019 - |
题
予与他们的纬度/多头邮编的一个数据库表。我试图找到一些代码,显示了一个查询,需要一个邮政编码和X英里,然后返回结果集,包括所有在该范围内的(精度不是很重要 - 只要它关闭)邮编的。
这个问题能有一个LINQ做SQL查询,所以我不必使用存储过程?
解决方案
我想通了,它实际上并没有那么难,一旦我找到了方程。
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
不隶属于 StackOverflow