Buscar strings con acentos no importa el idioma

Muchas veces realizamos métodos de búsquedas, y no tomamos en cuenta acentuación y/o cultura del usuario o idioma.

Muchas veces se arregla con tocando el collation de la base de datos, pero si tienes diferentes fuentes de datos, y al final tenemos colecciones con la información, pues podemos tirar de Normalize y NormalizeForm.

En mi caso me he creado un metodo helper para utilizarlo en las llamadas de las busquedas.

public static string RemoveDiacritics(string text)
{
return string.Concat(
text.ToLower().Normalize(NormalizationForm.FormD)
.Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) !=
UnicodeCategory.NonSpacingMark)
).Normalize(NormalizationForm.FormC);
}

//Si queremos hacer un test solo haciedo una llamada:

static void Main(string[] args)
 {
 List<customer> customers = new List<customer>();
 customer ctmp = new customer();
 ctmp.name = "复苏";

 customer ctmp2 = new customer();
 ctmp2.name = "Holá";

 customer ger = new customer();
 ger.name = "Heizung-Sanitär-Potthoff GmbH";

 customers.Add(ger);
 customers.Add(ctmp);
 customers.Add(ctmp2);

 //search.Add('')
 var gerresult = customers.Where(c => RemoveDiacritics(c.name).Contains(RemoveDiacritics("Sanitar"))).ToList();
 var result = customers.Where(c => RemoveDiacritics(c.name).Contains(RemoveDiacritics("hola"))).ToList();
 var result2 = customers.Where(c => RemoveDiacritics(c.name).Contains(RemoveDiacritics("复"))).ToList();

 }