【发布时间】:2015-01-28 12:23:51
【问题描述】:
来自System.Data.Entity.SqlServer.SqlSpatialFunctions类定义:
包含将 Linq 中的 SqlServer 方法公开给实体的函数存根。
我知道特别提到了 Linq to Entities,但是我想知道是否可以在我的后端代码中复制某些功能。
我有一个帐户模型,带有延迟加载的多边形集合。每个多边形都包含一个名为 Location 的 DbGeography 类型属性。
我正在尝试获取与某个点相交的所有多边形(它还具有延迟加载的属性地址,它具有称为位置的 DbGeography 类型属性)。
我可以这样做:
var matchedPolygons =
account.Polygons.Where(
x =>
point.Address.Location.Intersects(x.Polygon.Location)).ToList();
效果很好。
为了尝试提高性能,我认为稍微减少 Polygon 数据是个好主意。
var matchedPolygons =
account.Polygons.Where(
x =>
point.Address.Location.Intersects(SqlSpatialFunctions.Reduce(x.Polygon.Location, 100))).ToList();
然而,这会引发以下 System.NotSupportedException 异常:
此函数只能从 LINQ to Entities 调用。
我知道我可以使用上面的 Reduce 方法直接从我的存储库层检索多边形,但由于我使用延迟加载并且已经有 Polygons 集合可供我使用,我认为可能有一种使用方法 SqlSpatialFunctions 在这个阶段。
【问题讨论】:
标签: c# sql-server linq linq-to-entities spatial