L2Sでクエリが実行されていません。実際のクエリは次のようになります。生成されたSQLのLINQ to SQLとCodepages
SELECT *
FROM Table
WHERE
([ColA] IN (@p0) AND ColB = @p1)
OR ColB IN (@p2, @p3, @p4, @p5)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [220]
-- @p1: Input VarChar (Size = 14; Prec = 0; Scale = 0) [CountryDefault]
-- @p2: Input NVarChar (Size = 0; Prec = 0; Scale = 0) []
-- @p3: Input NVarChar (Size = 0; Prec = 0; Scale = 0) []
-- @p4: Input NVarChar (Size = 7; Prec = 0; Scale = 0) [WF1 1XU]
-- @p5: Input NVarChar (Size = 3; Prec = 0; Scale = 0) [WF1]
-- Context: ProfiledSqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
一つの問題は、OR
の結果としてマージソートですが、我々はそれに探しています。
他の問題はもっと面白いです。私たちのDBAの1人は、NVarChar
のパラメータとそれがVarChar
と比較されている列の間のコードページ変換にかなりの成果があることを指摘しました。
L2SがこれらのパラメータのいくつかをNVarChar
とし、p1
パラメータをVarChar
としたのは、奇妙なことです。コードでは、すべて文字列ですが、p1
は文字列リテラルで、その他は変数です。それらはすべて同じ列(ColB
)と比較されているので、列のデータ型とは関係ありません。
L2sは、渡された値に基づいて、クエリの生成時にどのようなデータ型を決定するのですか?可能であれば、どうすればそれを制御できますか?
このSQLを生成するLINQクエリを投稿できますか? – VVS
これはおそらく関連しています:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/d8577454-ebca-4697-80ef-73b7620e87a4 – VVS
@ p1は、ColAではなくColBと比較されます。 –