【发布时间】:2020-12-09 21:15:56
【问题描述】:
我正在尝试返回给定位置 50 英里范围内的项目列表。
我的表(简体)如下:
- 身份证
- 经度
- 纬度
- 状态
- 活动
我有一个初始查询:
var query = db.MyTable.Where(o=> o.Status == "New" && o.Active == true);
query = query.Where(o => new Point(o.Longitude, o.Latitude)
.IsWithinDistance(new Point(_currentLongitude, _currentLatitude), 50));
var result = query.ToList()
但是 - 它似乎不起作用并且出现如下错误 - 任何想法如何解决这个问题?或者是否有更好的方法来获取最近的物品?
.Where(p => 新点(p.Longitude, p.Latitude) .IsWithinDistance(geom: __p_3,
距离:___maxDistance_4))' 无法翻译。要么以可翻译的形式重写查询,要么通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
Startup.cs:
services.AddDbContext<AppDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
x => x.UseNetTopologySuite());
});
【问题讨论】:
-
您需要完全按照错误消息的建议进行操作:“要么以可翻译的形式重写查询,要么通过插入对 AsEnumerable() 的调用显式切换到客户端评估、AsAsyncEnumerable()、ToList() 或 ToListAsync()。有关详细信息,请参阅 go.microsoft.com/fwlink/?linkid=2101038"
-
@RobertHarvey - 这是
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite中的内置函数。见EF Core Spatial Data和Spatial Data in the SQL Server EF Core Provider -
@Steve - 你添加了
.UseNetTopologySuiteas shown here 吗? (另外,我假设是SQL Server,请确认或更正。) -
@MattJohnson-Pint: TIL
-
据我所知,目前不支持从纬度/经度创建新的
Point。您可能需要在模型上将数据存储为Point类型。
标签: c# .net-core entity-framework-core spatial-query nettopologysuite