استخدام LINQ إلى SQL للعثور على رموز البريدي مسافة نصف قطرها
-
22-07-2019 - |
سؤال
ولدي جدول قاعدة بيانات من zipcodes مع هم اللات / يتوق. أحاول العثور على بعض التعليمات البرمجية التي يظهر استعلام الذي يأخذ الرمز البريدي و x ميل ومن ثم العودة مجموعة من النتائج التي تتضمن كافة zipcodes التي هي ضمن تلك دائرة نصف قطرها (الدقة ليست مهمة جدا - طالما انها قريبة).
ويمكن أن يتم هذا مع 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