我需要将此T-SQL代码转换为LINQ:
SELECT
id, name, Snippet, description, lat, lng,
(3959 * acos(cos(radians('1'))
* cos(radians(lat))
* cos(radians(lng)
- radians('1'))
+ sin(radians('1'))
* sin(radians(lat)))) AS distance
FROM
marker
WHERE
(3959 * acos(cos(radians('1'))
* cos(radians(lat))
* cos(radians(lng)
- radians('1'))
+ sin(radians('1'))
* sin(radians(lat)))) < 50
ORDER BY
distance;
我试着让Linqer来做这件事,但我似乎无法正确设置。
任何帮助都会很棒!
更新
Dim markers() = (tmp_Table _
.Select(x => new{ _
x.Id, _
x.Name, _
x.Snippet, _
x.Description, _
x.Lat, _
x.Lng, _
Distance = (3959 * Math.acos(Math.cos(Math.PI) _
* Math.cos(x.Lat) _
* Math.cos(x.Lng) _
- Math.PI) _
+ Math.sin(Math.PI) _
* Math.sin(Math.PI))) _
}) _
.Where(x >= x.Distance < 50)
线路错误:
new{ _
说:
应为"With"类型。
类似的内容。不确定您的所有值是什么,以及您的列在Linq环境中的所有名称是什么。
对不起,我意识到这是VB太晚了。我不太熟悉VB的linq语法,但这至少可以帮助您入门。
此外,我的"弧度"转换可能不正确,但这是你应该采用的一般策略。
markers
.Select(x => new{
x.Id,
x.Name,
x.Snippet,
x.Description,
x.Lat,
x.Lng,
Distance = (3959 * Math.acos(Math.cos(Math.PI)
* Math.cos(x.Lat)
* Math.cos(x.Lng)
- Math.PI)
+ Math.sin(Math.PI)
* Math.sin(Math.PI)))
})
.Where(x => x.Distance < 50)
以下是VB.net中的入门查询。只需添加缺少的属性:
Dim Markers = (from M in tmp_Table where M.Distance < 50 Select new With {.Id = M.id, .Name = M.Name, .Snippet = M.Snippet }).ToList()