そのため、Linq はデータ型をサポートしていませんGeography
。これは、美しい「テーブルを Linq デザイン サーフェスにドラッグする」開発モデルの作業に大きな影響を与えます。
Linq を拡張して Geography データ型を操作する方法はありますか? それとも、Geography 列を使用する必要があるたびに、まったく新しいデータレイヤーと一連のクエリを構築する必要がありますか?
私はこれに数日間立ち往生しており、可能であれば解決できません。
そのため、Linq はデータ型をサポートしていませんGeography
。これは、美しい「テーブルを Linq デザイン サーフェスにドラッグする」開発モデルの作業に大きな影響を与えます。
Linq を拡張して Geography データ型を操作する方法はありますか? それとも、Geography 列を使用する必要があるたびに、まったく新しいデータレイヤーと一連のクエリを構築する必要がありますか?
私はこれに数日間立ち往生しており、可能であれば解決できません。
Linq to SQLが処理できる varbinary(max) に列をキャストします。すべてのクエリでこれを回避する 1 つの方法は、 として定義された計算列を追加することCAST(GeographyColumn AS varbinary(max))
です。
データを取得したら、短いユーティリティ メソッドを記述して、とを使用byte[]
して実際のMicrosoft.SqlServer.Types.SqlGeography
クラスに変換できます。/メソッド。MemoryStream
IBinarySerialize
Read
Write
私が知る限り、geography、geometry、hierarchyid、および任意のカスタム型を含む CLR 型を操作する必要がある場合、これが唯一の有効なソリューションです。Linq はそれらのいずれも「ネイティブ」にサポートしていません。すべてのボイラープレート コードを記述するのは少し面倒ですが、いくつかの拡張メソッドを使用すると簡単に記述できます。
この方法では列に対してクエリを実行できません。ただし、 Linq Dynamic Query Libraryを使用して、私が途中で呼び出すものを取得できます。インテリセンスやその他の Linq 機能はありませんが、それでも構成可能であるため、すべてのクエリを手作業で作成するよりも優れており、厳密に型指定された結果を得ることができます。
更新:ここで少しクリーンなソリューションを見つけました。このようにデザイナーを使用できます。SqlGeography
ラッパー プロパティを部分クラスに追加し、STGeomFromWKB
そのクラスでメソッドを使用するだけSqlBytes
です。ただし、それでもインライン クエリ機能は提供されません。
自分の POCO タイプに自分で手動でマップ/解析する必要があるようです。