質問

LinqToSQL または EntityFramework v4 の VS2010 リリースが SQL 2008 空間データ型に対するクエリをサポートするかどうかを (理想的にはリファレンス付きで) 知っている人はいますか?

役に立ちましたか?

解決

EF 4.0 では、次の組み合わせを使用して何かをハッキングできる可能性があります。 カスタム関数 そして空間型が実際にはバイナリ型であるかのように装っています。これは私がいろいろいじって試して追加しようと考えているものです 私のヒントシリーズ. 。しかし、まだそのハッキングさえ証明されていません。:(

また、直接サポートに関しては、残念ながら L2S も EF v4 も VS2010 タイムフレームでは空間タイプをサポートしません。

アレックス・ジェームス

Entity Framework プログラム マネージャー。

他のヒント

ここでエンティティにエンティティフレームワーク/ LINQでの作業それを得るための回避策があります:

あなたは、よく知られているテキスト(クエリで「geometry.ToStringを()」を使用して)、またはバイナリを返すために、データベースのビューを使用することができます。得られた行が返されたら、次に、単に.NETでSqlGeometryオブジェクトに文字列/バイナリ変換します。

ここではよく知られているテキスト文字列にジオメトリタイプの「場所」フィールドに変換ビューを構築するために使用されるサンプルクエリです:

SELECT ID, Name, Location.ToString() as Location FROM MyTable

ここではよく知られているテキストまたは「地理」オブジェクトの文字列表現が含まれている「場所」フィールドを持っていたエンティティを問い合わせるの例です。

var e = new MyApp.Data.MyDataEntities(connectionString);
var items = from i in e.MyTables
            select i;

foreach (var i in items)
{
    // "Location" is the geography field
    var l = SqlGeography.Parse(i.Location);
    var lat = l.Lat;
    var lng = l.Long;
}

1つの追加の事、あなたはLINQを使用して独自の空間検索を実行するためには、.NETにテーブルからすべてのデータを取得したくないので、あなたは、ストアドプロシージャ内の任意の空間ベースのクエリを行う必要がありますです。

これは、ネイティブSQLの空間タイプをサポートelegentではありませんが、それは同時にエンティティフレームワークとSQL空間で実行しているあなたを得るでしょう。

また、間違いなく手で書かれたテーブルと列でLINQのツーSQLやると直接SQL空間タイプを取得することができます。私はサンプルのDBで次のようにテストした(System.SqlServer.Typesに 『を使用して」参照とを含めることを忘れ』いけない。

...

string connectionString = @"Data Source=YADDAYADDA;Initial Catalog=MUMBLEMUMBLE;Integrated Security=True";
var pointsFileDc = new PointsFileDC(connectionString);
var geos = (from point in pointsFileDc.pointsData
            select point).Take(10);
foreach (var geo in geos)
{
    ObjectDumper.Write(geo);
}

...

public class PointsFileDC : DataContext
{
    public Table<GeoPoints> pointsData;
    public PointsFileDC(string connection)
        : base(connection)
    {
    }
}

[Table(Name = "Points")]
public class GeoPoints
{
    [Column(IsPrimaryKey = true)]
    public int PointId;
    [Column]
    public SqlGeography GeoPoint;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top