2011-02-24 138 views
5

如何根據情況使LINQ區分大小寫且不區分大小寫?LINQ區分大小寫

我正在使用sql server 2008和實體框架4.0。

我更改了COLLATION以使SQL Server區分大小寫。所以對於這樣的場景:

query = query.Where(x => x.Username == username); 

它很好用。 不過,我需要能夠拉出來的數據從數據庫按主題(或名稱或類似),像這樣在搜索時忽略大小寫

query = query.Where(x => (x.Name.Contains(Name))); 

,當記錄「的TestString」不工作,我正在尋找「測試」或「測試」或類似。我將如何使它能夠在文本中找到文本或字符串的一部分? 謝謝

+0

可能相關:http://stackoverflow.com/questions/3843060/linq-to-entities-case-sensitive-comparison – 2011-02-24 12:31:32

+0

使用ToUpper /下的解決方案或替代寫這樣的SQL查詢:SELECT' * FROM tblUser WHERE tblUser.userName ='test'COLLATE Finnish_Swedish_CI_AS' – Magnus 2011-02-24 12:39:55

回答

10

LINQ沒有區分大小寫的概念,它只關心布爾評估。所以,如果你想忽略的情況下,你應該這樣做:

query = query.Where(x => (x.Name.ToLower().Contains(Name.ToLower()))); 

有可能到頭來你會想傳遞一個CultureInfo與tolower()(或使用ToLowerInvariant()),你可能要緩存的Name.ToLower()結果以便不必執行該操作可能很多次,但是這應該讓你開始。

1

Queryable.Contains有一個超載取IEqualityComparer<T>用於比較。見msdn。如果你提供了一個不區分大小寫的比較器,這應該可以工作 - 我確信已經有一個在框架中。

+0

我認爲IEqualityComparer 僅在Linq支持對象 – Magnus 2011-02-24 12:31:05

5
query = query.Where(x => string.Equals(x.Name, Name, StringComparison.CurrentCultureIgnoreCase));