C# LINQ to实体不支持DbGeography条件

C# LINQ to实体不支持DbGeography条件,c#,entity-framework-6,geospatial,spatial-query,C#,Entity Framework 6,Geospatial,Spatial Query,我正在使用.NET4.5和EF6.0(也尝试了6.1.3)。 我在Entities表(System.Data.Entity.Spatial.DbGeography)中有Location geography列 在LINQ中,我试图选择指定区域内的所有实体 var center = DbGeography.FromText(string.Format("POINT({0} {1})", latitude, longitude), 4326); var region = center.Buffer(r

我正在使用.NET4.5和EF6.0(也尝试了6.1.3)。 我在Entities表(System.Data.Entity.Spatial.DbGeography)中有Location geography列

在LINQ中,我试图选择指定区域内的所有实体

var center = DbGeography.FromText(string.Format("POINT({0} {1})", latitude, longitude), 4326);
var region = center.Buffer(radius);
var result = db.Entities.Where(x => SqlSpatialFunctions.Filter(x.Location, region) == true).ToArray();
此查询返回一个错误:

An unhandled exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll

Additional information: The specified type member 'Location' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
如果这是真的:

http://referencesource.microsoft.com/#System.Data.Entity/System/Data/Objects/SqlClient/SqlSpatialFunctions.cs
这在web上的示例中是如何工作的

UPD。使用Intersects()也会遇到同样的问题


使用STIntersects()或STWithin()或它们的EF等价物,即使不能获得更好的性能,也可能获得相同的性能

// SQL STIntersects() equivalent    
var result = db.Entities.Where(x => x.Intersects(region)).ToArray();

// SQL STWithin() equivalent    
var result = db.Entities.Where(x => x.Intersects(region) == true && x.Difference(region).IsEmpty == true).ToArray();

如果需要全部或部分位于区域中的所有位置,请使用“相交”。如果您只希望这些模型完全位于该区域内,请使用“内”。

如果您使用DB-First方法,则必须从模型浏览器中更新模型,但不能手动更新。

在我的情况下,我的Linq查询不允许我使用:

x.Intersects(region) == true
我不得不把这个改成

x.Intersects(region).IsTrue

更新后的帖子。Intersects()抛出相同的异常。@deeptowncitizen-真奇怪!你用的是EF6?您是如何映射表的?是的,这是EF6。我有一张液化天然气的桌子,拉特菲尔德。我添加了地理类型的位置。并将此新列映射到实体DbGeography。顺便说一句,SQL请求工作正常
x.Intersects(region) == true
x.Intersects(region).IsTrue