SQL查询转换为LINQ

时间:2014-10-31 18:40:04

标签: sql vb.net linq sql-to-linq-conversion

我需要将此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;预期

2 个答案:

答案 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()