1

アプリケーションで動的クエリをサポートするために Entity SQL を生成しています。ただし、Entity Framework 5 を使用して Entity SQL で空間条件を指定する方法を見つけることができませんでした。

次のような空間フィールドを含むエンティティを持つモデルに対して Linq to Entities を使用したクエリ:

var a = new Model1Container();
var b = from c in a.Entity1
        where c.Loc.Intersects(System.Data.Spatial.DbGeography.FromText("POINT (43 -73)"))
        select c;

次のような SQL Server 2012 に期待される SQL を生成します。

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Loc] AS [Loc]
FROM [dbo].[Entity1] AS [Extent1]
WHERE ([Extent1].[Loc].STIntersects(geography::Parse(N'POINT (43 -73)'))) = 1

上記の Linq to Entities クエリを ESQL を使用してどのように書き換えますか? それともこれは不可能ですか?

4

2 に答える 2

3

既知のテキストからのインスタンス構築を含む、空間型を操作するために EntitySQL で使用できる正規関数のセットがあります。たとえば、これはポイントを構築するための有効な EntitySQL です。

GeometryFromText('POINT (43 -73)')

空間正規関数の完全なセットは SpatialEdmFunctions クラスで宣言されていますが、このクラスは DbExpression ツリーをプログラムで作成するために使用されるため、このクラスで利用できるリファレンス ドキュメントは EntitySQL の使用に最適な形式ではありません。ドキュメント チームにフォローアップして、利用可能なより良いリソースがあるかどうか、またはこれらを EntitySQL ドキュメントに追加する必要があるかどうかを確認します。

于 2013-02-24T00:02:11.773 に答える
0
var a = new YourDbContext();
var b = a.Entity1.Where(c=>c.Loc.Intersects(System.Data.Spatial.DbGeography.FromText("POINT (43 -73)"));
于 2013-02-17T21:56:47.740 に答える