2011-01-21 58 views
0

我們正在轉向EF4 & Linq作爲我們的db接口到Oracle 11g數據庫。數據庫設置爲區分大小寫,但我們需要搜索爲不區分大小寫。在oracle中,在查詢中使用「UPPER」可能非常昂貴。我已經看過用指定的結果如下選項: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 
----------------------- 

結果還挺爲自己說話,除了最後一個例子實際上可能錯過記錄。

有沒有人有任何其他想法的技術?

感謝,薩默爾

回答

0

您需要更改數據庫中的元數據中的列排序規則或在查詢中指定它。在EF查詢中指定它的唯一方法是使用ESQL或查詢生成器方法。更好的辦法是更改DB列本身的排序規則。