将复杂查询(COS,SIN,RADIANS,ACOS)重写为Entity-to-SQL

时间:2011-06-03 21:43:35

标签: entity-framework sqlclr

以下商店程序会检索给定纬度和经度的最近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

1 个答案:

答案 0 :(得分:4)

如果您使用的是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)};