按C#中字符串的距离进行数据库端排序

时间:2015-09-28 21:14:07

标签: c# sql-server entity-framework linq

我正在使用实体框架来建模现有的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);

1 个答案:

答案 0 :(得分:0)

尝试获取DbGeometry对象:

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