c#中根据与字符串的距离排序的数据库端

本文关键字:距离 排序 数据库 字符串 | 更新日期: 2023-09-27 18:15:00

我正在使用实体框架来建模现有的SQL Server数据库。目前,我只有对数据库的读访问权限。

我需要按距离排序我的查询,但是lat/long存储为数据库中的字符串,而不是像SqlGeometry这样的空间类型。我试图在LINQ查询内的晚/长上使用DbGeometry.FromText,以便我可以调用它的距离方法,但这不起作用。我在谷歌上搜索了很多,但都没有找到。

这里是我一直试图让它工作的代码:

var point = DbGeometry.FromText("POINT(" + latitude + " " + longitude + ")");
var query =  (from a in context.Adjuster
                join ac in context.AdjusterContact on a.AdjusterId equals ac.AdjusterId
                join z in context.ZipCode on ac.ZipCode equals z.Zip
                let p = DbGeometry.FromText("POINT(" + z.Latitude + " " + z.Longitude + ")")
                where (a.Active && !a.IsRecordDeleted)
                orderby p.Distance(point)
                select new AdjusterWithAdjusterContactAndZipCode() { adjuster = a, adjusterContact = ac, zipcode = z })
                //.OrderBy(r => DbGeometry.FromText("POINT(" + r.zipcode.Latitude + " " + r.zipcode.Longitude + ")").Distance(point))
                .Take(pageSize);

c#中根据与字符串的距离排序的数据库端

尝试像这样获取DbGeometry对象:

DbGeometry point = DbGeometry.FromText(string.Format("POINT({0} {1})",longitude, latitude), 4326);