2012-11-12 25 views
1

我正在生成實體SQL以在我的應用程序中提供動態查詢支持。但我一直無法找到一個如何能夠使用實體框架5.實體SQL中的空間支持

使用LINQ到實體由含像空間領域的實體模型的查詢到指定實體SQL空間條件:

var a = new Model1Container(); 
var b = from c in a.Entity1 
     where c.Loc.Intersects(System.Data.Spatial.DbGeography.FromText("POINT (43 -73)")) 
     select c; 

產生人們預期的SQL Server 2012的SQL,如:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Loc] AS [Loc] 
FROM [dbo].[Entity1] AS [Extent1] 
WHERE ([Extent1].[Loc].STIntersects(geography::Parse(N'POINT (43 -73)'))) = 1 

如何使用ESQL一個重寫上面的LINQ to Entities查詢?或者這是不可能的?

回答

3

我們有一套規範函數可以在EntitySQL中用於空間類型,其中包括來自衆所周知的文本的實例構造。例如,這是構建一個點有效EntitySQL:

GeometryFromText('POINT (43 -73)') 

全套的空間規範函數在SpatialEdmFunctions類中聲明,但是這個類是用於編程方式創建DbExpression樹木,所以參考文檔供這個類不是EntitySQL用法的最合適的形式。我將跟進我們的文檔團隊,看看是否有更好的資源可用,或者我們是否需要將這些資源添加到EntitySQL文檔中。

+1

我爲我的遲到答覆表示歉意,但我現在才能夠深入瞭解處理此問題的代碼。我能夠將EF的源代碼從CodePlex中解放出來,並檢查您提到的類。我在那裏找到了我需要的所有功能,非常感謝!如果這些功能被記錄在案,那肯定會很棒。就我而言,我正在構建一個動態查詢編譯器,它將我讓用戶操作的分層數據結構轉換爲E-SQL。因此,能夠在文檔中查看E-SQL中可用的所有內容將非常有用。 –

+1

該文檔當前是[這裏](http://msdn.microsoft.com/en-us/library/hh749497.aspx),這非常棒。 –

0
var a = new YourDbContext(); 
var b = a.Entity1.Where(c=>c.Loc.Intersects(System.Data.Spatial.DbGeography.FromText("POINT (43 -73)")); 
+0

感謝您的回答,儘管我們的想法是手動編寫實體SQL中該查詢的等效代碼,而不是通過LINQ表達式。 –