DbSpatialServices.Default.Within用于DbGeography的方法

时间:2014-03-21 01:45:10

标签: entity-framework spatial-query

在EF 6中,我可以使用DbSpatialServices.Default.Within,但DbGeometry类型仅作为参数,如何使用DbGeography类型的Within函数?

SQL Server 2012有一个新的空间函数STWithin,它接受DbGeography和DbGeometry。

Namespace: System.Data.Entity.Spatial Assembly: EntityFramework (in EntityFramework.dll)

1 个答案:

答案 0 :(得分:1)

没有直接路线,但有简单而聪明的解决方法。

使用以下内容:

DbGeography geog = blah;
<your stored data>.Where(x => x.<Your Geography Column>.Intersects(geog) && x.<Your Geography Column>.Difference(geog).IsEmpty == true)

Intersects的调用确保使用任何有效的SpatialIndex,而最后的Difference子句删除任何不完全在给定DbGeography实例中的对象。

当然,如果你只是在多边形中寻找点,那么排除Difference条款以获得性能是明智的。