0

次のようなクエリを実行しようとしています

var results = MyItem.MyEntitySet.Where( x => x.PropertyB == 0 )

MyEntitySet には、MyItem との関連付け PropertyA が 1 つあります。

理想的には、基礎となる SQL クエリは

SELECT .. FROM .. WHERE ([t0].[PropertyA] = @p0) AND ([t0].[PropertyB ] = @p1)

PropertyA と PropertyB は、クエリしているテーブルの 2 つの主キーであるためです。

しかし、私のトレースは、プログラムが最初に PropertyA を照会して を返しMyEntitySet、次に PropertyB を照会してを返すことを示しているようですvar results

とにかく、単一の SQL ステートメントでこれら 2 つの条件を使用して Linq にクエリを実行させることはできますか?

4

1 に答える 1

0

多分そうでないかもしれません。生成された SQL は、LINQ クエリの記述方法と一致するため、生成された SQL は驚くべきものではありません。「MyEntitySet」で表されるエンティティから開始すると、生成される SQL が変わる可能性があります。

LINQ to SQL と Entity Framework のどちらを使用しているかはすぐにはわかりません。LINQ to SQL では 1 対多のリレーションシップを "エンティティ セット" として表しますが、Entity Framework ではリレーションシップをファースト クラス オブジェクトとして扱います。単なるエンティティ セットです。生成された SQL に影響します。

あと二つの感想…

生成された SQL をそれほど細かく制御したい場合は、おそらく LINQ に満足できないでしょう。常に最適な SQL が生成されるとは限りません (ただし、驚くこともあります)。一方、LINQ の主な利点の 1 つは、データ内の実際の関係を表現するコードを記述し始めることです。従来の ADO.NET の欠点は、SQL の操作と DataSet および DataTable コレクションの処理に関するコードを記述することです。LINQ は、非常にクリーンで、安全で、堅牢で、保守しやすいコードを作成できます。すべてがトレードオフです。

第 2 に、クエリの生成は時間の経過とともに改善される可能性があります (特に Entity Framework の場合)。

于 2009-10-14T20:56:19.290 に答える