Какой самый простой способ фильтрации элементов с LINQ через метод Where
, игнорирующий акцентуацию и регистр?
До сих пор я мог игнорировать Case, вызывая методы по свойствам, что я не считаю хорошей идеей, так как он вызывает один и тот же метод для каждого элемента (верно?).
Итак, вот что я пока что получил:
var result = from p in People
where p.Name.ToUpper().Contains(filter.ToUpper())
select p;
Пожалуйста, скажите мне, является ли это хорошей практикой, и самый простой способ игнорировать акцентуацию.
Для акцентов Вы можете перечислить всех их (здесь для французского языка), если Вы не можете обновить свою 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;