Entity Framework - нечувствительность к регистру Содержит?
Возможный дубликат:
LINQ содержит нечувствительность к регистру
Я хочу решить эту проблему, которая не включает ToUpper или ToLower, как я использую в приведенном ниже коде;
var upper = term.ToUpper();
using (var db = this.DataContext)
{
return db.Counties.Where(x => x.CountyName.ToUpper().Contains(upper)).ToList();
}
Я использую enitly framework, поэтому решение С# с использованием StringComparison.CurrentCultureIgnoreCase
не работает. Он работает для Equals
, EndsWith
и StartsWith
, но не Contains
.
Ответы
Ответ 1
Я знаю, что это напрямую не связано с EF, но только решение, о котором я могу думать, состоит в том, чтобы изменить сортировку столбцов таблицы базы данных как нечувствительную к регистру, например:
ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME nvarchar(100) COLLATE Latin1_General_CI_AS NULL
CI - нечувствительность к регистру /
CS - чувствительный к регистру
AS - чувствительный к акценту /
AI - акцент нечувствителен (также может быть полезен)
Если вы не можете изменить сортировку столбца таблицы, вы можете использовать прямой запрос из EF с принудительной сортировкой
select *
from table
where country collate Latin1_General_CI_AS != @country
Ответ 2
Я использую EF6 и Sql Server, а Contains
сопоставляется с LIKE '%@p0%'
, который нечувствителен к регистру в моем случае. Поэтому в моем случае:
db.Counties.Where(x => x.CountyName.Contains(term)).ToList();
работает по мере необходимости. Дополнительная информация в Ответ Sjoerd.
Ответ 3
Просто добавьте .ToLoWer()
из upper
using (var db = this.DataContext)
{
return db.Counties
.Where(x => x
.CountyName.ToLower()
.Contains(upper.ToLoWer())).ToList();
}