2017-02-01 44 views
2

我不明白爲什麼:==默認在C#中的LINQ區分大小寫

在DB我有記錄的成員表名稱=「鮑勃」

var a = await repository.Members.FirstOrDefaultAsync(x => x.Name == "BOB"); //is true (Entity Framework Core) 

var c = repository.Members.FirstOrDefault(x => x.Name == "BOB"); //is true (LINQ) 

var b = "Bob" == "BOB"; //is false 
+11

它不是「在LINQ中」 - 它是「在您使用的特定LINQ提供程序中,針對您正在使用的特定數據庫」。 –

+1

[linq to entities區分大小寫比較]的可能重複(http://stackoverflow.com/questions/3843060/linq-to-entities-case-sensitive-comparison) – uTeisT

+3

這是一個SQL比較,而不是LINQ。靈敏度由列的整理來控制。 –

回答

11

問題無關使用LINQ。 LINQ只是一個抽象機制,允許您使用相同的語法來查詢不同的數據源。如果默認情況下使用MSSQL,它將具有SQL_Latin1_General_CP1_CI_AS歸類,這是不區分大小寫的(請注意名稱中的CI)。所以,當你的LINQ查詢被轉換爲SQL(select * from Members where Name = 'BOB')並運行它將返回結果。所以基本上你可能需要將SQL Server數據庫的change the collation轉換爲區分大小寫的區域,如果你想用它進行區分大小寫的查找。

+1

正如副標題一樣,根據帶標記的重複問題,更改查詢的列的排序規則應該足夠了,而不是更改整個db的排序規則。 – uTeisT

相關問題