C#linq SqlGeography - 按纬度和经度查找50米范围内的位置

时间:2011-06-10 15:13:47

标签: linq-to-entities geocoding latitude-longitude

我在一个存储为'float'

的SQL DB中有lat和long

我正在尝试下面的lat& lng是C#double

var yourLocation = SqlGeography.Point(lat, lng, 4326);
MyConn conn = new MyConn();
var query = from p in conn.Locations
           let distance = SqlGeography
            .Point(p.Latitude, p.Longitude, 4326)
            .STDistance(yourLocation)
            .Value
             where distance <= 50
select p;
return query.Distinct().ToList();

我得到的是以下错误

LINQ to Entities无法识别方法'System.Data.SqlTypes.SqlDouble STDistance(Microsoft.SqlServer.Types.SqlGeography)'方法,并且此方法无法转换为商店表达式。

对此有何看法?

2 个答案:

答案 0 :(得分:0)

看看this thread。我不知道EF4有任何更正,但这并不意味着他们没有纠正它。

还有一个article here关于空间类型的实体框架行为。

希望有所帮助

答案 1 :(得分:0)

回答这个问题为时已晚,但需要社区帮助。出现此问题是因为项目中未引用 Microsoft.SqlServer.Types 。只需右键单击引用并选择添加引用对话框,就会出现选择程序集选项卡并搜索此程序集并选择。问题已解决。