0

我需要将此 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”类型。

4

2 回答 2

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()
于 2014-11-19T05:47:00.383 回答
0

像这样的东西。不确定您的所有值是什么,以及您的列的所有名称在您的 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)
于 2014-10-31T19:01:49.187 回答