Я сохранил функцию базы данных для вычисленных ближайших мест:
CREATE FUNCTION LoadNearBusinesses
(
@latitude DECIMAL(25, 10),
@longtitude DECIMAL(25, 10),
@areaRadius DECIMAL(25, 10)
)
RETURNS TABLE
AS
return SELECT DISTINCT [Business].* FROM [Business]
LEFT JOIN [BusinessLocation] ON [BusinessLocation].Business_id = [Business].Id
LEFT JOIN [Location] ON [BusinessLocation].Id = [Location].Id
WHERE 6371 * ACos(COS(@latitude* PI() / 180) * Cos([Location].Latitude * PI() / 180) * Cos(([Location].Longitude- @longtitude)* PI() / 180) + SIN(@latitude* PI() / 180) * Sin([Location].Latitude* PI() / 180)) <= @areaRadius;
А теперь мне нужно вызвать эту функцию из моего кода и получить IQueryable <<em> Business > для использования ее в сетках telerik.
Я пытаюсь:
Session.CreateSQLQuery(
string.Format(@"SELECT * FROM [dbo].[LoadNearBusinesses]({0},{1},{2})",
latitude, longitude, radius)).AddEntity(typeof(Business)).List<Business>();
Но это List, и когда я добавлю дополнительную фильтрацию, она будет выполняться в памяти, а не в базе данных.
У вас есть идеи? Спасибо.