EF5 几何相交查询不返回任何内容
本文关键字:返回 任何内 查询 何相交 EF5 | 更新日期: 2023-09-27 18:33:13
我有一个SQL Server 2008 R2表,其中包含一个geometry
(不是地理)列,以及其他一些"标准"列。我目前在表中有一行用于测试,该记录中的几何列具有以下边界的多边形,插入多边形时的 SRID 为 0(零):
POLYGON ((380 220, 380 575, 585 575, 380 575, 380 220))
我现在想使用 EF5 检查该多边形中是否有点。首先,我创建点:
DbGeometry testPoint = DbGeometry.PointFromText("POINT(400 240)", 0);
List<LocationArea> tResults = (from s in db.LocationAreas
where testPoint .Intersects(SqlSpatialFunctions.MakeValid(s.AreaBounds))
select s).ToList();
在添加 SqlSpatialFunctions.MakeValid
方法之前,我得到的第一个错误是s.AreaBounds
结果不"有效",而代码中创建的点是。在这个优秀的帖子的帮助下修复了那个 -> 查询-dbgeometry-for-specific-latlng-value
现在,我可能会发疯(我已经看了一段时间的这段代码),但是我总是得到一个返回的空列表(count = 0),我相信这一点在多边形范围内。
所以,任何指示都会不胜感激,就像我说的,可能只是我:-)
多米尼克
在尝试了很多很多不同的东西来得到我想要的结果之后,下面的代码现在终于可以工作了,而且每次都有效,到目前为止,我扔给它的每一个多边形/点场景。
为什么需要这样做我不知道,但我当然希望这在将来将几何 SQL 列与实体框架一起使用时对其他人有所帮助:
DbGeometry testPoint = DbGeometry.PointFromText("POINT(400 240)", 0);
List<LocationArea> tResults = (from s in db.LocationAreas
where testPoint .Intersects(SqlSpatialFunctions.MakeValid(s.AreaBounds).Envelope)
select s).ToList();
经过一些深入的调试并真正浏览了通过 Linq 查询返回的 DBGeometry 字段后,我发现了这一点。我发现 s.AreaBounds 字段返回了一个 LINESTRING(...) 值,而不是最初保存在数据库中的值,这是一个 POLYGON(...) 值。进一步查看返回的对象属性,我发现.信封有我想要的。