5

そのため、Linq はデータ型をサポートしていませんGeography。これは、美しい「テーブルを Linq デザイン サーフェスにドラッグする」開発モデルの作業に大きな影響を与えます。

Linq を拡張して Geography データ型を操作する方法はありますか? それとも、Geography 列を使用する必要があるたびに、まったく新しいデータレイヤーと一連のクエリを構築する必要がありますか?

私はこれに数日間立ち往生しており、可能であれば解決できません。

4

2 に答える 2

3

Linq to SQL処理できる varbinary(max) に列をキャストします。すべてのクエリでこれを回避する 1 つの方法は、 として定義された計算列を追加することCAST(GeographyColumn AS varbinary(max))です。

データを取得したら、短いユーティリティ メソッドを記述して、とを使用byte[]して実際のMicrosoft.SqlServer.Types.SqlGeographyクラスに変換できます。/メソッド。MemoryStreamIBinarySerializeReadWrite

私が知る限り、geography、geometry、hierarchyid、および任意のカスタム型を含む CLR 型を操作する必要がある場合、これが唯一の有効なソリューションです。Linq はそれらのいずれも「ネイティブ」にサポートしていません。すべてのボイラープレート コードを記述するのは少し面倒ですが、いくつかの拡張メソッドを使用すると簡単に記述できます。

この方法では列に対してクエリを実行できません。ただし、 Linq Dynamic Query Libraryを使用して、私が途中で呼び出すものを取得できます。インテリセンスやその他の Linq 機能はありませんが、それでも構成可能であるため、すべてのクエリを手作業で作成するよりも優れており、厳密に型指定された結果を得ることができます。

更新:ここで少しクリーンなソリューションを見つけました。このようにデザイナーを使用できます。SqlGeographyラッパー プロパティを部分クラスに追加し、STGeomFromWKBそのクラスでメソッドを使用するだけSqlBytesです。ただし、それでもインライン クエリ機能は提供されません。

于 2009-12-12T06:39:56.323 に答える
1

自分の POCO タイプに自分で手動でマップ/解析する必要があるようです。

于 2009-12-12T06:24:22.103 に答える