【发布时间】:2015-09-11 09:29:32
【问题描述】:
我在将此语句从 SQL 转换为 LINQ 时遇到了一些问题。
DECLARE @radians float
SELECT @radians = 57.295779513082323
SELECT
t1.*,
DistanceInMiles =
3963.0*acos(
sin(t1.Latitude/(@radians))
* sin(t2.Latitude/(57.295779513082323))
+ cos(t1.Latitude/(@radians))
* cos(t2.Latitude/(@radians))
* cos(t2.Longitude/(@radians) - t1.Longitude/(@radians))
)
FROM ZipCodeData t1
JOIN ZipCodeData t2 ON (
3963.0*acos(
sin(t1.Latitude/(@radians))
* sin(t2.Latitude/(57.295779513082323))
+ cos(t1.Latitude/(@radians))
* cos(t2.Latitude/(@radians))
* cos(t2.Longitude/(@radians)
- t1.Longitude/(@radians))
) < 100
)
WHERE t2.ZipCode='10001'
ORDER BY DistanceInMiles
我在 VB.NET 中工作
我不知道从哪里开始
Dim results = z1 in Entities.ZipCodeDatas
好的,我有一个开始,但认真
编辑:
Dim radians = 57.29577951309232
Dim results = From z1 In Entities.ZipCodeDatas
z1.ZipCode
Join z2 In Entities.ZipCodeDatas On z2.ZipCode Equals z1.ZipCode
首先,我不知道如何创建DistanceInMiles,我不知道如何创建第二个Join,我不知道如何使用Less than < 子句加入表
编辑 2:
Dim result = (
From z1 In Entities.ZipCodeDatas
Join z2 In Entities.ZipCodeDatas On z2.ZipCode Equals z1.ZipCode
Where (
3963.0 * Math.Acos(
Math.Sin(z1.Latitude.Value / (radians)) _
* Math.Sin(z2.Latitude.Value / (57.295779513082323)) _
+ Math.Cos(z1.Latitude.Value / (radians)) _
* Math.Cos(z2.Latitude.Value / (radians)) _
* Math.Cos(z2.Longitude.Value / (radians) - z1.Longitude.Value / (radians)) _
)
) < radius
)
【问题讨论】:
-
别忘了您可以选择将上述内容转换为存储过程,然后使用 EF 调用该过程。
标签: sql vb.net linq entity-framework