LINQ Where Ignore Accentuation and Case

Какой самый простой способ фильтрации элементов с LINQ через метод Where, игнорирующий акцентуацию и регистр?

До сих пор я мог игнорировать Case, вызывая методы по свойствам, что я не считаю хорошей идеей, так как он вызывает один и тот же метод для каждого элемента (верно?).

Итак, вот что я пока что получил:

var result = from p in People
             where p.Name.ToUpper().Contains(filter.ToUpper())
             select p;

Пожалуйста, скажите мне, является ли это хорошей практикой, и самый простой способ игнорировать акцентуацию.

26
задан Smur 14 September 2011 в 15:07
поделиться

1 ответ

Для акцентов Вы можете перечислить всех их (здесь для французского языка), если Вы не можете обновить свою db схему, ни принести весь список в RAM:

var result = from p in People
             where p.Name.ToUpper()
                .Replace("à", "a")
                .Replace("â", "a")
                .Replace("ä", "a")
                .Replace("ç", "c")
                .Replace("é", "e")
                .Replace("è", "e")
                .Replace("ê", "e")
                .Replace("ë", "e")
                .Replace("î", "i")
                .Replace("ï", "i")
                .Replace("ô", "o")
                .Replace("ù", "u")
                .Replace("û", "u")
                .Replace("ü", "u").Contains(RemoveDiacritics(filter.ToUpper()))
             select p;
1
ответ дан 28 November 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: