Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql 使用Linq to Sql查找半径距离内的ZipCodes_Linq To Sql_Zipcode - Fatal编程技术网

Linq to sql 使用Linq to Sql查找半径距离内的ZipCodes

Linq to sql 使用Linq to Sql查找半径距离内的ZipCodes,linq-to-sql,zipcode,Linq To Sql,Zipcode,我有一个zipcodes及其Lat/long的数据库表。我试图找到一些代码来显示一个查询,该查询需要一个zipcode和x英里,然后返回一组结果,其中包括该半径内的所有zipcode(精度不是很重要,只要很接近) 这可以通过Linq到SQL查询来完成吗,这样我就不必使用存储过程了?我找到了它,而且在找到等式后,它实际上并不那么难 Public Function SearchStudents(ByVal SearchZip As String, ByVal Miles As Double) As

我有一个zipcodes及其Lat/long的数据库表。我试图找到一些代码来显示一个查询,该查询需要一个zipcode和x英里,然后返回一组结果,其中包括该半径内的所有zipcode(精度不是很重要,只要很接近)


这可以通过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
Public Function searchstudent(ByVal SearchZip作为字符串,ByVal Miles作为双精度)作为IEnumerable(学生的)
Dim dc作为新的IMDataContext()
双倍调暗lat
将液化天然气调暗为双倍
Dim maxlat为双精度
双倍暗明拉特
Dim maxlng为双精度
双倍调暗
Dim zip作为ZipCode=(从dc.ZipCodes中的z开始,其中z.ZipCode=SearchZip)
纬度
液化天然气=压缩经度
最大纬度=纬度+英里/69.17
minlat=lat-(maxlat-lat)
最大液化天然气=液化天然气+英里/(数学Cos(minlat*Math.PI/180)*69.17)
最小液化天然气=液化天然气-(最大液化天然气-液化天然气)
Dim ziplist=从z开始,在dc.ZipCodes中,z.纬度>=最小纬度_
z.纬度=minlng_

z.经度,检查它是否在一个正方形内,而不是半径内。你需要比较横向/纵向对之间的距离来获得半径…@KristoferA-我个人并不在乎,只要距离很近,但如果你有一个更好的公式来适合这个函数,我当然不会介意精度的提高。那么这个代码仍然是正方形还是调整为半径?我相信它仍然是@DaveInCaz的正方形,如果7年前我问这个问题时有一台时间机器的话!!谢谢你的否决票=\我没有否决这个问题,但如果有人否决了,我很抱歉,因为我认为这是一个好问题。但是合并副本似乎有很多价值,即使它们已经存在了一段时间。他们的问题不会是我第一次问的问题的副本吗?抱歉,如果它给人这样的印象,那不是我的意图。此外,“可能的副本…”的措辞不是我自己的——所以当我将其标记为可能的副本时,使用了该措辞本身。