Переписать сложный запрос (COS, SIN, RADIANS, ACOS) в Entity-to-SQL - PullRequest
1 голос
/ 04 июня 2011

Следующая процедура сохранения извлекает ближайшие 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 Ответ

4 голосов
/ 04 июня 2011

Если вы используете Ms Sql Server, вы можете использовать функции SqlClient с Entity SQL

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

Согласно это эти функции доступныдля запросов LINQ также.Я не мог найти пример, но это кажется простым.

var qry = from r in mytable
select new {Acos = SqlFunctions.ACos(r.mycloumn)};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...