Подтвердить что ты не робот

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.

4b9b3361

Ответ 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();
            }