SQL查询转换为LINQ



我需要将此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()

相关内容

  • 没有找到相关文章

最新更新