我正在使用实体框架来建模现有的SQL Server数据库。目前,我只对数据库具有读访问权限。
我需要按距离排序我的查询,但是lat / long在数据库中存储为字符串,而不是像SqlGeometry
这样的空间类型。我正在尝试在LINQ查询中的lat / long上使用DbGeometry.FromText
,以便我可以在其上调用Distance方法,但这不起作用。我用Google搜索广泛而没有运气。
以下是我一直试图让它发挥作用的代码:
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);
答案 0 :(得分:0)
尝试获取DbGeometry对象:
DbGeometry point = DbGeometry.FromText(string.Format("POINT({0} {1})",longitude, latitude), 4326);