在EF 6中,我可以使用DbSpatialServices.Default.Within,但DbGeometry类型仅作为参数,如何使用DbGeography类型的Within函数?
SQL Server 2012有一个新的空间函数STWithin,它接受DbGeography和DbGeometry。
Namespace: System.Data.Entity.Spatial Assembly: EntityFramework (in EntityFramework.dll)
答案 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
条款以获得性能是明智的。