c# - 地理空间搜索 - Entity Framework Core/PostgreSQL

标签 c# postgresql linq asp.net-core entity-framework-core

我有一个表存储一些事件位置和一个使用 ef core 映射到它的类:

public class Location
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        
        [Column(TypeName = "geography (point)")]
        public Point Location { get; set; }

        public string? Address { get; set; }

        public string? City { get; set; }

        public string? Region { get; set; }

        public string? Country { get; set; }

        public Post Post { get; set; }

        public int PostId { get; set; }
    }

问题
Location 类与 Post 具有 1 - 1 关系。 现在,给定纬度和经度以及 X km 半径的输入,我希望能够从数据库中获取该半径内的所有帖子。即我想执行地理空间查询。

我找到了一个解决方案,但它涉及执行一些简单的 SQL 查询,我会不惜一切代价避免这些查询。 我将如何使用 LINQ 执行它?

最佳答案

解决方案来自Postgis 。它增加了对地理对象的支持,允许在 SQL 中运行位置查询。它必须安装在数据库端。对于服务器端,以下library必须安装。

可以执行地理空间查询的相关方法称为“.IsWithinDistance”。 纬度、经度必须作为点传递,以及半径。这将返回指定范围内的所有记录。

示例:

posts = await Context.Posts
        .Include(p => p.Location)                
        .Where(p => p.Location.Location.IsWithinDistance(location, radius * 1000) 
        .AsNoTracking().ToListAsync();

关于c# - 地理空间搜索 - Entity Framework Core/PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61976121/

相关文章:

c# - .NET、C#、LINQ、SQL 和 OR-Mapping - 我就是不明白 :(

c# - 我的应用程序与任务计划程序一起使用,无法在我的 C# 代码中创建目录

c# - 确保泛型集合包含派生自两个基础对象的对象

c# - Google Chrome/Windows 7 对 WPF 的影响?

django - 使用 PostgreSQL 在 Django 中获取下一个工作项

c# - 使用 LINQ 在数组中查找最小和最大日期?

arrays - LINQ - 根据数组 B 上的值从数组 A 中选择元素

C# 获取不同的最大值

postgresql - 使用 Postgres 和 Knex 更新表中的日期时间值

postgresql - 有人可以解释参数 autovacuum_naptime 吗?