Linqは、Geography
のデータ型をサポートしていないため、素敵な「ドラッグテーブルからLinqデザインサーフェイス」開発モデルに大きなスパナがスローされます。Linqとサポートされていないデータ型(地理)
Geographyデータ型で動作するようにLinqを拡張する方法はありますか? Geographyカラムを使用する必要があるときは、常に新しいデータレイヤーとクエリセットを作成する必要がありますか?
私は数日間これに固執しており、可能であればうまくいかない。
Linqは、Geography
のデータ型をサポートしていないため、素敵な「ドラッグテーブルからLinqデザインサーフェイス」開発モデルに大きなスパナがスローされます。Linqとサポートされていないデータ型(地理)
Geographyデータ型で動作するようにLinqを拡張する方法はありますか? Geographyカラムを使用する必要があるときは、常に新しいデータレイヤーとクエリセットを作成する必要がありますか?
私は数日間これに固執しており、可能であればうまくいかない。
Looks like自分でPOCOタイプに手動でマッピング/解析する必要があります。
カラムをvarbinary(max)にキャストします。これはLinqからSQL までのハンドルです。すべてのクエリでこれを避ける方法の1つは、CAST(GeographyColumn AS varbinary(max))
として定義された計算列を追加することです。
データを取得したら、MemoryStream
とIBinarySerialize
を使用して、実際のMicrosoft.SqlServer.Types.SqlGeography
クラスに変換する短いユーティリティメソッドを作成できます。 Read
/Write
の方法。
地理、ジオメトリ、hierarchyid、任意のカスタムタイプを含むCLRタイプで作業する必要がある場合は、これが唯一の実用的なソリューションです。Linqはそれらのいずれかをネイティブにサポートしていません。ボイラープレートのコードをすべて書くのはちょっと難しいですが、いくつかの拡張メソッドで簡単にすることができます。
このようにして列に対してクエリを実行することはできません。しかし、あなたはLinq Dynamic Query Libraryを使って私が途中で呼ぶものを得ることができます。インテリセンスや他のLinqのグッズはありませんが、それでもコンポジットが可能で、すべてのクエリを手作業で作成するよりも優れており、強力なタイプの結果を得ることができます。
更新:少し洗練されたソリューションhereが見つかりました。この方法でデザイナを使用できます。部分クラスにSqlGeography
ラッパープロパティを追加し、SqlBytes
クラスを使用してSTGeomFromWKB
メソッドを使用します。ただし、それでもインラインクエリ機能は提供されません。
しかし、空間クエリを実行するのに役立つものはありませんか? が好きなようにしたいのであれば、私は自分のクエリを作成しなければならないでしょう。 –
Linqを同軸にする良い方法があったとしてもCLR型を列として受け入れるSQLには、そのメソッドをSQL関数呼び出しにマップする方法はまだ分かりません。あなたの最善の策はSQL Server自体にSPやUDFとしてこれらのクエリを書くことですが、アプリケーション内にSQLを書く必要がある場合は、Linq Dynamic Query Libraryを使用して必要なものを手に入れることができます。 – Aaronaught
DynamicQueryに慣れていない場合に備えて、リンクの返信を更新しました。 – Aaronaught