Linq&不支持的数据类型(地理位置)

时间:2009-12-12 05:11:25

标签: linq-to-sql geography spatial-query

因此,Linq不支持Geography数据类型,它在可爱的“拖动表到Linq设计界面”开发模型中投入了大量的工具。

有什么方法可以扩展Linq以使用Geography数据类型? 或者,我是否需要在需要使用Geography列时构建一个全新的数据层和查询集?

我已经被困在这几天了,如果可能的话就无法解决。

2 个答案:

答案 0 :(得分:3)

将列转换为varbinary(max),Linq to SQL 可以处理。避免在每个查询中执行此操作的一种方法是添加定义为CAST(GeographyColumn AS varbinary(max))的计算列。

获得byte[]数据后,您可以编写一个简短的实用工具方法,使用Microsoft.SqlServer.Types.SqlGeographyMemoryStream将其转换为实际的IBinarySerialize类。{{ 1}} / Read方法。

据我所知,如果您需要使用任何CLR类型,这是唯一可行的解​​决方案,包括地理,几何,hierarchyid和任何自定义类型--Linq不“本地”支持任何类型。编写所有样板代码有点痛苦,但是使用一些扩展方法可以使它更容易。

您将无法以这种方式查询列;但是,你可以使用Linq Dynamic Query Library获得我在那里打电话的内容。你不会有intellisense或其他一些Linq好东西,但它仍然是可组合的,因此比手工制作每个查询更好,你可以得到强类型的结果。

更新:我找到了一个稍微清洁的解决方案here。你可以这样使用设计师;只需将Write包装器属性添加到部分类中,并将SqlGeography方法与STGeomFromWKB类一起使用。但是,这仍然不会为您提供内联查询功能。

答案 1 :(得分:1)

Looks like您必须自己手动映射/解析自己的POCO类型。