如何通过`SqlDataReader`读取`geography`列?

时间:2014-08-14 19:53:21

标签: sql-server entity-framework sqldatareader geography sqlgeography

我有一个带有geography列的SQL Server 2008数据库,该列由System.Data.Entity.Spatial.DbGeography在Entity Framework 6.0.0-alpha3中生成。

现在我需要用SqlDataReader读取该列。但我不知道该怎么做。使用旧的上下文不是一种选择。我试图将其转换为DbGeography

Location = (DbGeography)reader.GetValue(index)

但是我收到了这个错误:

  

无法转换“Microsoft.SqlServer.Types.SqlGeography”类型的对象   输入'System.Data.Entity.Spatial.DbGeography'

你有什么建议吗?

2 个答案:

答案 0 :(得分:2)

嗯,很简单。我只是困惑。但是,我不会删除问题,而是将答案发布给有同样问题的其他人。

// read the value as dynamic:
dynamic temp = reader.GetValue(index);

// the temp contains Lat and Long properties:
var text = string.Format("POINT({0:R} {1:R})", temp.Long, temp.Lat);

// the temp also contains the STSrid as coordinate system id:
var srid = temp.STSrid.Value;

// the rest is really simple:
Location = System.Data.Entity.Spatial.DbGeography.PointFromText(text, srid);

答案 1 :(得分:1)

如果您的地理位置很重要,可以使用:

  

SELECT MyColumn.Lat,MyColumn.Long ...

reader.GetDouble(0);
reader.GetDouble(1);