LINQ Où Ignorer Accentuation Cas
Quelle est la façon la plus simple de filtrer les éléments avec LINQ par le biais de la Where
méthode ignorant accentuation et la cas?
Jusqu'à présent, j'ai été en mesure d'ignorer Boîtier par des appels de méthodes sur les propriétés, je ne pense pas que l'idée est bonne parce qu'elle demande la même méthode pour chaque élément (à droite?).
Voici ce que j'ai obtenu jusqu'à présent:
var result = from p in People
where p.Name.ToUpper().Contains(filter.ToUpper())
select p;
S'il vous plaît dites-moi si c'est une bonne pratique, et de la façon la plus simple de l'ignorer accentuation.
Vous devez vous connecter pour publier un commentaire.
Pour ignorer la casse et les accents (signes diacritiques), vous pouvez d'abord définir une méthode d'extension comme ceci:
(Modifié à partir de Ignorant les lettres accentuées en comparaison de chaînes de caractères)
Vous pouvez maintenant exécuter votre requête:
C'est très bien si vous venez de parcourir une collection en C#, mais si vous êtes à l'aide de LINQ to SQL, il est préférable d'éviter de méthodes non normalisées (y compris les méthodes d'extension) dans votre requête LINQ. C'est parce que votre code ne peut pas être converti en SQL valide et donc s'exécuter sur SQL Server avec toutes ses jolies optimisation de la performance.
Car il ne semble pas être un moyen standard d'ignorer les accents dans LINQ to SQL, dans ce cas, je suggère de changer le type de champ que vous souhaitez rechercher d'être le cas - et les accents (CI_AI).
Avec votre exemple:
Votre requête doit désormais ignorer accentuation et la cas.
Notez que vous aurez besoin de supprimer temporairement les contraintes sur le terrain avant l'exécution de la requête ci-dessus, par exemple
Maintenant votre requête LINQ serait tout simplement:
Voir la question relative à la ici.
Changement collate:
Voici un code qui permet de comparer les ignorer accentuation:
Ignorant les lettres accentuées en comparaison de chaînes de caractères
Je vais avoir la décence de ne pas copier le code, de sorte que l'auteur peut se représentant pour sa réponse. Maintenant, pour répondre à votre question:
Vous obtenez ce morceau de code et l'utiliser comme ceci:
Même de mettre ce code dans une méthode d'extension. J'ai 🙂
Suivantes Dunc de la solution de changer le classement de l'ensemble de la base de données, voici un tutoriel complet qui traite avec des index, des clés, etc.:
https://www.codeproject.com/Articles/302405/The-Easy-way-of-changing-Collation-of-all-Database
(Assurez-vous de lire tous les commentaires en premier.)