Maison > développement back-end > C++ > Comment filtrer efficacement une collection basée sur plusieurs mots-clés avec Lambda/LINQ ?

Comment filtrer efficacement une collection basée sur plusieurs mots-clés avec Lambda/LINQ ?

DDD
Libérer: 2025-01-21 11:52:14
original
934 Les gens l'ont consulté

How to Efficiently Filter a Collection Based on Multiple Keywords with Lambda/LINQ?

Utilisez Lambda/LINQ pour filtrer efficacement les ensembles contenant plusieurs mots-clés

Question :

Comment utiliser efficacement les expressions Lambda ou LINQ pour filtrer une collection en fonction de plusieurs mots-clés ?

Solution :

L'exemple donné dans la question met en évidence la nécessité de vérifier plusieurs mots-clés dans un seul champ (ici le champ "Commentaires"). Bien qu’il existe des exemples de filtrage basé sur un seul mot-clé, étendre cette logique à plusieurs mots-clés nécessite une approche plus puissante.

Méthode d'expression lambda :

Nous pouvons utiliser la méthode d'extension fournie dans la réponse pour répondre à cette exigence en utilisant des expressions Lambda :

<code class="language-csharp">var newList = MainList
   .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true)
   .ToList();</code>
Copier après la connexion

Méthode LINQ :

Alternativement, nous pouvons utiliser LINQ pour obtenir le même résultat :

<code class="language-csharp">var newList = MainList.Where(m => keywords.Any(k => m.Comments.Contains(k)));</code>
Copier après la connexion

Explication :

Les deux méthodes utilisent la méthode d'extension FilterByItems dans la classe QueryableExtensions. Cette méthode accepte une collection d'éléments, un prédicat à appliquer et une valeur booléenne indiquant s'il faut effectuer une opération « OU » ou « ET ».

Dans notre exemple, nous transmettons la liste des mots-clés sous forme d'éléments, un prédicat qui vérifie si le champ Commentaires contient chaque mot-clé et définit isOr sur true pour effectuer une opération « OU ». Cela garantit que si un enregistrement contient l'un des mots-clés spécifiés, il est inclus dans les résultats.

Implémentation de la méthode d'extension FilterByItems :

La méthode FilterByItems est implémentée à l'aide de la classe ExpressionReplacer, qui nous permet de remplacer une partie de l'expression. Ceci est utilisé pour générer un prédicat qui vérifie la présence de chaque mot-clé.

Exemple d'utilisation :

Pour utiliser la méthode FilterByItems, nous fournissons simplement la collection à filtrer, une liste de mots-clés à vérifier et, éventuellement, définissons isOr sur true pour une opération "OR", ou sur false pour une opération "AND".

<code class="language-csharp">// 过滤“Comments”字段中的关键词
var filteredList = MainList.FilterByItems(keywords, (m, k) => m.Comments.Contains(k));

// 使用OR操作包含任何匹配关键词的记录
var newList = MainList.FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true);</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal