2010-12-02 10 views
1

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は、渡された値に基づいて、クエリの生成時にどのようなデータ型を決定するのですか?可能であれば、どうすればそれを制御できますか?

+0

このSQLを生成するLINQクエリを投稿できますか? – VVS

+0

これはおそらく関連しています:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/d8577454-ebca-4697-80ef-73b7620e87a4 – VVS

+0

@ p1は、ColAではなくColBと比較されます。 –

答えて

1

this threadで回避策があり、すべてのパラメータを効果的に正しいタイプに変換しました。

+0

私は元々、等価比較のためのL2Sベータ版の問題であったと信じていましたが、最終的なRTMリリースで修正されましたが、Contains()比較ではまだ解消されています。 –