LINQ чувствителен к регистру - PullRequest
6 голосов
/ 24 февраля 2011

Как сделать LINQ чувствительным к регистру и НЕ чувствительным к регистру в зависимости от ситуации?

Я использую SQL Server 2008 и Entity Framework 4.0.

Я изменил COLLATION, чтобы сделать SQL Server чувствительным к регистру. так что для сценариев, подобных этим:

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

отлично работает. Однако мне нужно иметь возможность извлекать данные из db , игнорируя регистр при поиске по теме (или имени или подобному), например:

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

, который не работает, когда запись «TestString» и я ищу «test» или «Test» или подобное. Как бы я сделал так, чтобы, когда он нашел текст или часть строки в тексте? спасибо

Ответы [ 4 ]

11 голосов
/ 24 февраля 2011

LINQ не имеет понятия чувствительности к регистру, он заботится только о булевой оценке. Так что если вы хотите игнорировать регистр, вы должны сделать что-то вроде:

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

Скорее всего, вы захотите передать CultureInfo в ToLower () (или использовать ToLowerInvariant()), и вам может понадобиться кэшировать результат Name.ToLower(), чтобы не выполнять эту операцию, потенциально большую количество раз, но это должно начать вас.

6 голосов
/ 04 октября 2013
query = query.Where(x => string.Equals(x.Name, Name, StringComparison.CurrentCultureIgnoreCase));
1 голос
/ 24 февраля 2011

Queryable.Contains имеет перегрузку, принимающую IEqualityComparer<T>, используемую для сравнения.См. msdn .Если вы предоставите компаратор без учета регистра, это должно сработать - я вполне уверен, что он уже есть в фреймворке.

1 голос
/ 24 февраля 2011

Прочитайте мой ответ на это:

String.Equals () не работает должным образом

Это не тот ответ, который вы хотели, вероятно: -)

Ах ... и если вам нужно преобразовать в один и тот же случай для сравнения, ToUpper лучше, чем ToLower. Не спрашивай меня почему. Но вы можете прочитать здесь: Сравнение строк без учета регистра в LINQ-to-SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...