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>
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>
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>
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!