我需要将此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{ _
表示:
&#39;使用&#39;预期
答案 0 :(得分:0)
像这样的东西。不确定您的所有值是什么,以及您的Linq环境中列的所有名称。
抱歉,我意识到这是VB太迟了。我对linq的VB语法不是很熟悉,但这可以帮助你开始至少。
我的&#34;弧度&#34;转换可能不正确,但这是您应该采取的一般策略。
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)
答案 1 :(得分:0)
这是在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()