我已存儲的數據庫功能,用於計算最近的位置:如何通過功能NHibernate調用數據庫存儲功能,並獲得IQueryable的<T>作爲結果
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 < 業務>作爲在遠程網格中使用它的結果。
我嘗試:
Session.CreateSQLQuery(
string.Format(@"SELECT * FROM [dbo].[LoadNearBusinesses]({0},{1},{2})",
latitude, longitude, radius)).AddEntity(typeof(Business)).List<Business>();
但這是列表,當我添加額外的過濾會在內存中執行,而不是數據庫。
你有什麼想法嗎?謝謝。
謝謝您的回答,但LINQ到NHibernate的不支持Math.Acos,Math.Cos功能 – pryabov 2012-08-28 18:37:41