2011-01-21 15 views
0

私たちはEF4 & LinqをOracle 11g dbへのdbインターフェースとして使用しています。データベースは大文字と小文字を区別して設定されますが、大文字と小文字を区別しないで検索する必要があります。クエリで "UPPER"を使用するOracleでは、潜在的に非常に高価です。私が示された結果と、以下のオプションを見てきました:EF4 Linq Oracle11g照会なし大文字小文字の区別

ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE)) 

generates SQL Where clause: 

WHERE TABLE.FIELD = VARIABLE 
--------------------- 
ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE.ToUpper())) 

generates SQL Where clause: 

WHERE TABLE.FIELD = (UPPER(VARIABLE)) 
--------------------- 
ChangeEntities.TABLE.Where(x => x.FIELD.ToUpper().Equals(VARIABLE.ToUpper())); 

generates SQL Where clause: 

WHERE (UPPER(TABLE.FIELD)) = (UPPER(VARIABLE)) 
--------------------- 
ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE, StringComparison.CurrentCultureIgnoreCase)) 

generates SQL Where clause: 

WHERE TABLE.FIELD = VARIABLE 
----------------------- 

結果はちょっと最後の例は、実際にレコードを逃すことができることを除いて、自分自身のために話します。

技術に関する他の考えがありますか?

おかげで、Sammer

答えて

0

あなたは、DBのメタデータの列の照合順序を変更したり、クエリでそれを指定するのいずれかが必要です。 EFのクエリで指定する唯一の方法は、ESQLまたはQuery Builderのメソッドを使用することです。より良いアイデアは、DB列自体の照合順序を変更することです。

0

どのデータプロバイダを使用しますか?この記事(http://www.orafaq.com/node/91)を読んでみてください - たぶんあなたを助けることができます。

関連する問題