![](/img/trans.png)
[英]Entity Framework Core with PostgreSQL and SEQUENCE functionality
[英]Geospacial search - Entity Framework Core / PostgreSQL
我有一個存儲一些事件位置的表和一個使用 ef 核心映射到它的 class:
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; }
}
問題
位置 class 與 Post 具有 1 - 1 的關系。 現在,給定緯度和經度以及半徑X km的輸入,我希望能夠從該半徑內的數據庫中獲取所有帖子。 即我想執行地理空間查詢。
我找到了一個解決方案,但它涉及執行一些普通的 SQL 查詢,我不惜一切代價避免這些查詢。 我將如何使用 LINQ 執行它?
解決方案來自Postgis 。 它增加了對地理對象的支持,允許在 SQL 中運行位置查詢。 它必須安裝在數據庫端。 對於服務器端,必須安裝以下庫。
可以執行地理空間查詢的相關方法稱為“.IsWithinDistance”。 緯度,經度必須作為一個點傳遞,半徑。 這將返回指定范圍內的所有記錄。
例子:
posts = await Context.Posts
.Include(p => p.Location)
.Where(p => p.Location.Location.IsWithinDistance(location, radius * 1000)
.AsNoTracking().ToListAsync();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.