簡體   English   中英

String.Equals()無法正常工作

[英]String.Equals() not working as intended

我正在使用LINQ搜索我的一個Entity Framework表,並根據名稱找到一個“組”。 名稱是一個字符串,看起來是Unicode(說它在edmx中)。 我有一個方法GetGroup() ,我傳入一個名稱來搜索。 通過代碼調試,我的數據庫中已經有一個名為“Test”的組。 一旦我傳入一個名為“TEST”的組,我希望它返回已經在數據庫中的“Test”。 它出於某種原因,沒有找到“測試”並認為“測試”不存在。 這是我的查詢,我不明白為什么它不起作用。 請幫忙。

“name”是組名中傳遞的。 我的.Equals似乎只有在gr.Name和name完全相同的情況下才有效。 如果一個字符在兩個字符串之一中是大寫字母,則.Equals不起作用。 我曾嘗試使用InvariantCultureIgnoreCase ,這似乎沒有幫助。 如果有人要求, MyLeagueIdLeagueId將始終匹配,則設置數據庫,以便可以有一個不同聯盟ID的組。 我不認為這是問題所在。

Group g = (from gr in this.DatabaseConnection.Groups
           where gr.Name.Equals(name, StringComparison.OrdinalIgnoreCase) &&
           gr.LeagueId == this.MyLeagueId
           select gr).FirstOrDefault();

使用LINQ to Entities時,它會自動將其轉換為LINQ to SQL。 如果您正在進行.Equals on的數據庫字段沒有NOCASE(在我的示例中為SQLite)的整理,那么它將始終區分大小寫。 換句話說,數據庫定義了如何進行字符串比較而不是代碼。

StringComparison.OrdinalIgnoreCase的字符串比較在內存或IEnumerable<T> 您正嘗試將其與IQueryable<T>一起使用,但您的可查詢提供程序無法理解它。

這對我有用:

db.Users.FirstOrDefault(
     s => s.Username.Equals(username, StringComparison.OrdinalIgnoreCase)
);

做了一些研究。 你做不到。 排序規則(比較類型)在表的列級別定義。 您無法通過EF修改它。 如果它被定義為不區分大小寫,那么所有搜索都將不區分大小寫。 如果它被定義為區分大小寫,那么你唯一的希望是ToUpper()字符串。

http://connect.microsoft.com/VisualStudio/feedback/details/435783/entity-framework-conceptual-model-doesnt-support-string-equals-via-linq

http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/3810aa67-f6fe-4624-a14b-eaaa0e05ddcd

EF4 Linq Oracle11g使查詢不區分大小寫

LINQ to Entities區分大小寫比較

使用String.Compare()因為它可以轉換為Sql。

以下是Linq中字符串匹配的一些示例,以及Sql轉換。

我從技術角度來看TravyGuy的答案。 要獲得更直接,實用的答案,請嘗試使用:

string.Compare(string A, string B, StringComparison.OrdinalIgnoreCase) == 0

嘗試name.Equals(gr.Name, StringComparison.OrdinalIgnoreCase)

如果它工作,那么問題可能gr.Name

---編輯---

我猜測gr.Name不是System.string類型。 (因為String.Equals在前一篇文章中給出了一個錯誤==>)

試一試

(gr.Name as string).Equals(name, StringComparison.OrdinalIgnoreCase)

要么

String.Equals((gr.Name as string), name, StringComparison.OrdinalIgnoreCase)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM