如何编写最近点计算的LINQ查询?
我在SQL Server数据库中以字符串形式保存的表中有Lat
和Lng
。
在stackoverflow上找到一个解决方案,查询看起来像这样
var coord = DbGeography.FromText(String.Format("POINT({0} {1})", latitude.ToString().Replace(",", "."), longitude.ToString().Replace(",", ".")));
var nearest = (from h in db.hotels
where h.location != null
orderby h.location.Distance(coord)
select h).Take(limit);
return nearest;
试图实现这一点,但location.distance
是不可理解的。有人可以指导我吗?
答案 0 :(得分:1)
使用正确的工具完成工作。纬度和经度不是字符串 - 它们应该是浮点数。 SQL Server 2005+具有烘焙的地理空间功能,如果您使用适当的数据类型,它可以为您执行距离计算。默认情况下,距离将以米为单位计算。
我尝试使用SQLFiddle,但它不喜欢它。
create table #locations (
Locationname varchar(20) not null unique,
LocationGeo geography not null
);
insert into #locations values (
'Seattle',
geography::STGeomFromText('POINT(-122.33365 47.612033)',4326)
);
insert into #locations values (
'San Francisco',
geography::STGeomFromText('POINT(-122.41667 37.78333)',4326)
);
insert into #locations values (
'London',
geography::STGeomFromText('POINT(0 0)',4326)
);
declare @p1 geography;
SELECT @p1 = Locationgeo from #locations where locationname='London';
SELECT locationname, @p1.STDistance(locationgeo)/1000 as [Distance from London] from #locations order by [Distance from London];