2012-11-12 22 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表达式。 –