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);
尝试像这样获取DbGeometry对象:
DbGeometry point = DbGeometry.FromText(string.Format("POINT({0} {1})",longitude, latitude), 4326);