2013-01-18 120 views
25

可能重複:
LINQ Contains Case Insensitive實體框架 - 不區分大小寫包含?

我想解決這個問題,不涉及ToUpper的或ToLower將,正如我在下面的代碼中使用;

var upper = term.ToUpper(); 
using (var db = this.DataContext) 
{ 
    return db.Counties.Where(x => x.CountyName.ToUpper().Contains(upper)).ToList(); 
} 

我使用entitly框架,以便使用StringComparison.CurrentCultureIgnoreCase的C#解決方案不起作用。它爲EqualsEndsWithStartsWith,但不Contains工作。

+0

也許這個答案是一個你可以使用:http://stackoverflow.com/a/444818/3312的[LINQ包含不區分大小寫( –

+0

可能重複http://stackoverflow.com/questions/ 3360772/LINQ-包含-不區分大小寫)或[不區分大小寫包含(字符串)](http://stackoverflow.com/questions/444798/case-insensitive-containsstring) –

+1

既不的應用它們。這些解決方案在實體框架中不起作用,因爲我試圖在問題的第二段中指出。 – arame3333

回答

-3

剛剛從upper

using (var db = this.DataContext) 
      { 
       return db.Counties 
         .Where(x => x 
         .CountyName.ToLower() 
         .Contains(upper.ToLoWer())).ToList(); 
      } 
+4

如果你看了這個問題,我指出我不想用它作爲答案。 – arame3333

+0

現在這是我能夠找到的唯一答案嗎? – Zapnologica

+3

這個答案幫了我哈哈......我只是轉而使用較低的而不是較高的......謝謝隊友! – bboyle1234

3

添加.ToLoWer()我用EF6和SQL Server和Contains被映射到LIKE '%@p0%'這情況下,我不區分大小寫。所以在我的情況下:

db.Counties.Where(x => x.CountyName.Contains(term)).ToList(); 

根據需要工作。更多信息在Sjoerd answer

+1

你的情況意味着只有你已經配置了不區分大小寫的排序規則。沒有更多,沒有更多。 – Tomas

+0

就我而言,我可以運行您的查詢並區分大小寫。所以我認爲@Tomas有它的想法,但如果EF可以添加要指定的功能,那將是非常棒的。導致人們可能希望在1個查詢中區分大小寫,然後在另一個區域中區分大小寫。 – Zapnologica

5

我知道,這是不直接相關EF,但只有我能想到的解決辦法是改變數據庫表列排序規則是不區分大小寫例如:

ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME nvarchar(100) COLLATE Latin1_General_CI_AS NULL 

CI - 不區分大小寫/ CS - 區分大小寫

AS - 區分重音/ AI - 重音不敏感(也可能是有用的)

如果你不能改變表列的排序規則,你可以從EF使用直接查詢與強迫合作llation

select * 
from table 
where country collate Latin1_General_CI_AS != @country