String.Equals () не работает по назначению

Я использую LINQ для поиска по одной из моих таблиц Entity Framework и поиска «группы» на основе имени. Имя является строкой и выглядит как Unicode (говорит, что это находится в edmx). У меня есть метод GetGroup() и я GetGroup() имя для поиска. Отлаживая код, у меня уже есть группа с именем «Тест» в моей базе данных. Как только я перейду в группу под названием «TEST», я ожидаю, что она вернет «Тест», который уже был в базе данных. По какой-то причине он не находит «Тест» и считает, что «ТЕСТ» не существует. Вот мой запрос, я не понимаю, почему он не работает. Пожалуйста помоги.

«name» – это имя переданного в имени группы. Мои .Equals похоже, работают, только если gr.Name и имя gr.Name . Если один символ является капиталом в одной из двух строк, то .Equals не работает. Я попытался использовать InvariantCultureIgnoreCase , и это, похоже, не помогло. В случае, если кто-то спросит, MyLeagueId и LeagueId всегда будут совпадать, firebase database будет настроена так, что может быть группа в другом лиге. Я не думаю, что это проблема.

 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, не имеет набора NOCASE (SQLite в моем примере), тогда он всегда будет чувствителен к регистру. В других словах firebase database определяет, как выполнять сравнение строк, а не код.

Сравнение строк с StringComparison.OrdinalIgnoreCase работает в памяти или с IEnumerable . Вы пытаетесь использовать его с IQueryable , но поставщик вашего запроса не понимает его.

Это работает для меня:

 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 .

— Редактировать —

Я предполагаю, что gr.Name не относится к типу System.string . (поскольку String.Equals дает вам ошибку ==> из предыдущего сообщения)

дайте это выстрел

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

или

 String.Equals((gr.Name as string), name, StringComparison.OrdinalIgnoreCase) 
  • почему equals () метод, когда у нас есть оператор?
  • Разница между пустой и пустой ("") строкой Java
  • Есть ли утилита отражения Java для глубокого сравнения двух объектов?
  • Как проверить, равна ли моя строка нулевой?
  • Есть ли полная ссылка на реализацию IEquatable?
  • Как реализовать метод hashCode и equals
  • Как переопределить метод equals в java
  • Лучшая реализация для метода hashCode
  • Какие проблемы следует учитывать при переопределении равных и hashCode в Java?
  • В чем разница между IEquatable и просто переопределением Object.Equals ()?
  • Понимание работы equals и hashCode в HashMap
  • Interesting Posts

    Проверьте, существует ли событие на элементе

    Как связаны ALSA и PulseAudio?

    Как установить JFrame в центр, независимо от разрешения монитора?

    Отключить диалоговое окно «Открыть файл – предупреждение безопасности Windows 7» для exe на сетевом диске?

    Служба зависает в WaitForExit после вызова командного файла

    Windows (7, 8, 10). Является ли чистая установка лучше, чем обновление, и если да, то почему? (быть конкретной)

    Воспроизведение двух звуков одновременно

    Лучший алгоритм для оценки математического выражения?

    Правило Microsoft Outlook 2010 для сопоставления с источником HTML?

    Почему `private val` и` private final val` отличаются?

    Каковы некоторые лучшие способы избежать do-while (0); взломать C ++?

    Zip в отдельные файлы

    Как правильно использовать PagedResourcesAssembler из Spring Data?

    Java получает ошибку для реализации интерфейса с более слабым доступом

    Порт генератора случайных чисел от C до Java?

    Давайте будем гением компьютера.