我很難讓這個工作。我正在嘗試在IQueryable上使用以下Filter助手進行半徑搜索。還有一組其他過濾器在RadiusSearch應用之前應用。順序應該不重要,因爲目標是讓查詢延遲到ToList()操作。在LINQ查詢中調用SQL用戶定義的函數
public static IQueryable<ApiSearchCommunity> RadiusSearch(this IQueryable<ApiSearchCommunity> communities)
{
var centerLatitude = 30.421278;
var centerLongitude = -97.426261;
var radius = 25;
return communities.Select(c => new ApiSearchCommunity()
{
CommunityId = c.CommunityId,
City = c.City,
//Distance = c.GetArcDistance(centerLatitude, centerLongitude, c.Latitude, c.Longitude, radius)
});
}
可不知何故,我寫這樣GetArcDistance一個幫手以上,後者又調用SQL上一個UDF?我試圖生成查詢如下
SELECT
comms.community_id,
comms.city,
comms.distance
FROM (
SELECT
c.community_id,
c.city,
dbo.udf_ArcDistance(
30.421278,-97.426261,
c.community_latitude,
c.community_longitude
) AS distance
FROM communities c) AS comms
WHERE comms.distance <= 25
ORDER BY comms.distance
您使用的是什麼版本的實體框架? –
我正在使用版本5。 – Praveen
您是否檢查過EF中的空間類型支持? http://msdn.microsoft.com/en-us/data/hh859721.aspx –