【问题标题】:Re-Write complex query (COS, SIN, RADIANS, ACOS) into Entity-to-SQL将复杂查询(COS、SIN、RADIANS、ACOS)重写为 Entity-to-SQL
【发布时间】:2011-09-08 03:29:20
【问题描述】:

以下存储过程检索给定纬度和经度的最近的 500 个地址。许多应用程序都使用它,它是有用的查询之一。

是否可以用 Entity-to-SQL 重写?如果是这样,您能否指出正确的方向(我对 Entity-to-SQL 并不陌生)?提前致谢。

DECLARE @CntXAxis FLOAT 
DECLARE @CntYAxis FLOAT 
DECLARE @CntZAxis FLOAT 


SET @CntXAxis = COS(RADIANS(-118.4104684)) * COS(RADIANS(34.1030032)) 
SET @CntYAxis = COS(RADIANS(-118.4104684)) * SIN(RADIANS(34.1030032)) 
SET @CntZAxis = SIN(RADIANS(-118.4104684)) 

SELECT 
        500 *,
    ProxDistance = 3961 * ACOS( dbo.XAxis(LAT, LONG)*@CntXAxis + dbo.YAxis(LAT, LONG)*@CntYAxis + dbo.ZAxis(LAT)*@CntZAxis) 
FROM 
    tbl_ProviderLocation 
WHERE 
    (3961 * ACOS( dbo.XAxis(LAT, LONG)*@CntXAxis + dbo.YAxis(LAT, LONG)*@CntYAxis + dbo.ZAxis(LAT)*@CntZAxis) <= 10) 
ORDER BY 
    ProxDistance ASC

【问题讨论】:

    标签: entity-framework sqlclr


    【解决方案1】:

    如果你使用的是 Ms Sql Server,你可以将 SqlClient 函数与 Entity SQL 一起使用

    http://msdn.microsoft.com/en-us/library/bb399586.aspx

    根据this,这些函数也可用于 LINQ 查询。我找不到一个例子,但它似乎很简单。

    var qry = from r in mytable
    select new {Acos = SqlFunctions.ACos(r.mycloumn)};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      相关资源
      最近更新 更多