0

Linq2Sql (私の顧客は 3.5 に固執しているため、エンティティ フレームワークに移行できません) を使用して SQL Server DB にアクセスしています。

場合によってはパフォーマンスを向上させるために、コンテキストに LoadOptions を追加しました。コンパイルされたクエリを使用しているため、無効にすることはできません。また、それらが役に立たず、リクエストが遅くなった場合も同様です。

しかし、コンテキストに LoadOptions が追加されていない場合とまったく同じように、データを取得したい場合があります。

回避策として、完全なレコードではなく、その投影を返すようにしました。

例 :

DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Product>(c => c.X);
dlo.LoadWith<Product>(c => c.Y);
context.LoadOptions = dlo;

return (from product in context.Products
        where ...
        select product).First();

これは次のようなクエリを実行します。

Select product.*, X.*, Y.* from Product Left outer join X left outer join Y where....

この場合、すべてが完全に正常です。

私のアプローチは次のようなものに依存しています:

return (from product in context.Products
        where ...
        select new MyType() { p = product.Field }).First();

のようなクエリを実行します

Select product.Field from Product ->Left outer join X left outer join
Y<-- where....

リクエストの LEFT OUTER JOIN に注意してください。

私は次のようなものを期待していましたが:

Select product.Field from Product where....

これらの結合を回避する方法があるかどうか知りたいですか?

アドバイス、どうもありがとうございました

4

1 に答える 1

1

このブログ記事では、DataLoadOptions を DataContext インスタンスから一時的に削除する方法について説明します。

ロード オプションを変更するには、DataContext のプライベート loadOptions フィールドの値を変更するだけです。


送信したいSQLがわかっている場合は、変換ステップをスキップして使用できますDataContext.ExecuteQuery<Product>

于 2012-06-26T14:28:14.983 に答える