1

我正在生成实体 SQL 以在我的应用程序中提供动态查询支持。然而,我一直无法找到如何使用 Entity Framework 5 在 Entity SQL 中指定空间条件。

使用 Linq to Entities 对具有包含空间字段的实体的模型进行查询,例如:

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 查询?或者这是不可能的?

4

2 回答 2

3

我们有一组可以在 EntitySQL 中用于操作空间类型的规范函数,其中包括来自众所周知的文本的实例构造。例如,这是用于构造点的有效 EntitySQL:

GeometryFromText('POINT (43 -73)')

完整的空间规范函数集在 SpatialEdmFunctions 类中声明,但此类用于以编程方式创建 DbExpression 树,因此可用于此类的参考文档不是最适合 EntitySQL 使用的形式。我将跟进我们的文档团队,看看是否有更好的资源可用,或者我们是否需要将这些资源添加到 EntitySQL 文档中。

于 2013-02-24T00:02:11.773 回答
0
var a = new YourDbContext();
var b = a.Entity1.Where(c=>c.Loc.Intersects(System.Data.Spatial.DbGeography.FromText("POINT (43 -73)"));
于 2013-02-17T21:56:47.740 回答