所以,Linq 不支持Geography
数据类型,这给可爱的“将表拖到 Linq 设计表面”开发模型的工作带来了麻烦。
有什么方法可以扩展 Linq 以使用 Geography 数据类型吗?
或者,每当我需要使用地理列时,我是否需要构建一个全新的数据层和一组查询?
我已经被这个问题困扰了几天,无法弄清楚是否可能。
将列转换为 varbinary(max),Linq to SQLcan处理。避免在每个查询中执行此操作的一种方法是添加定义为的计算列CAST(GeographyColumn AS varbinary(max))
.
一旦你拥有了byte[]
数据,您可以编写一个简短的实用方法将其转换为实际的Microsoft.SqlServer.Types.SqlGeography
类使用MemoryStream
和IBinarySerialize
.Read
/Write
方法。
据我所知,如果您需要使用任何 CLR 类型(包括地理、几何、hierarchyid 和任何自定义类型),这是唯一可行的解决方案 - Linq 并不“原生”支持其中任何类型。编写所有样板代码有点痛苦,但是您可以通过一些扩展方法使其变得更容易。
您将无法以这种方式查询列;然而,你可以使用我所说的中途Linq 动态查询库。您不会拥有智能感知或其他一些 Linq 功能,但它仍然是可组合的,因此比手工制作每个查询更好,并且您可以获得强类型结果。
更新:我找到了一个稍微干净的解决方案here。您可以这样使用设计器;只需添加SqlGeography
将属性包装到分部类并使用STGeomFromWKB
方法与SqlBytes
班级。不过,这仍然无法为您提供内联查询功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)