开发者

Re-Write complex query (COS, SIN, RADIANS, ACOS) into Entity-to-SQL

开发者 https://www.devze.com 2023-03-10 02:47 出处:网络
The following store procedure retrives nearest 500 addresses for the given latitude and longitude. Many applications use it, and it is one of the useful query.

The following store procedure retrives nearest 500 addresses for the given latitude and longitude. Many applications use it, and it is one of the useful query.

Is it possible to rewrite with Entity-to-SQL? If so, could you please point me to the right direction (I am not new to Entity-to-SQL)? Thanks in advance.

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


SET @CntXAxis = COS(RADIANS(-11开发者_运维百科8.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


If you are using Ms Sql Server, you can use SqlClient functions with Entity SQL

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

According to this those functions are available for LINQ queries aswell. I couldn't find an example but it seems straightforward.

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

精彩评论

暂无评论...
验证码 换一张
取 消