4

次のコードがあります。

IQueryable<SomeType> allItems = ...;
var selectedItems = allItems.Where( item => ( item.State == 1 || item.State == 3 ) );
Console.WriteLine( selectedItems.ToString() );

次のクエリがダンプされます。

SELECT [t0].[ItemId], [t0].[State], <other columns>
FROM [Items] AS [t0]
WHERE [t0].[State] = @p0 OR [t0].[State] = @p1

ご覧のとおり、実際の値 1 と 3 はクエリに挿入されず、代わりにパラメーターとして渡され、最適でない実行プランが選択されることがよくあります。

代わりに、どうにかして Ling-To-Sql を発行させることはできますWHERE [t0].[State] = 1 OR [t0].[State] = 3か?

4

1 に答える 1

-1

ここここで説明されているように、Linq to sql が SQL を生成したら、SQL を操作する方法がいくつかありますが、いずれも糸が多く脆くなる可能性があるため、どちらも使用することはお勧めしません。

パラメータ化された sql は、linq のような orm を sql またはエンティティ フレームワークに使用する主な利点の 1 つであり、これによりsql インジェクションが防止されます。SQL サーバーは、パラメータ化された SQL の実行計画もキャッシュするため、アプリケーション全体のパフォーマンスが向上します。

これは、パラメーター化された SQL の利点に関する優れた記事です。

于 2014-10-31T15:58:16.483 に答える