Verwenden Sie Lambda/LINQ, um Sätze mit mehreren Schlüsselwörtern effizient zu filtern
Frage:
Wie kann man Lambda-Ausdrücke oder LINQ effizient verwenden, um eine Sammlung basierend auf mehreren Schlüsselwörtern zu filtern?
Lösung:
Das in der Frage angegebene Beispiel verdeutlicht die Notwendigkeit, in einem Feld (hier dem Feld „Kommentare“) nach mehreren Schlüsselwörtern zu suchen. Zwar gibt es Beispiele für die Filterung auf der Grundlage eines einzelnen Schlüsselworts, die Ausweitung dieser Logik auf mehrere Schlüsselwörter erfordert jedoch einen leistungsfähigeren Ansatz.
Lambda-Ausdrucksmethode:
Wir können die in der Antwort bereitgestellte Erweiterungsmethode verwenden, um diese Anforderung mithilfe von Lambda-Ausdrücken zu erfüllen:
var newList = MainList .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true) .ToList();
LINQ-Methode:
Alternativ können wir LINQ verwenden, um das gleiche Ergebnis zu erzielen:
var newList = MainList.Where(m => keywords.Any(k => m.Comments.Contains(k)));
Erklärung:
Beide Methoden verwenden die FilterByItems-Erweiterungsmethode in der QueryableExtensions-Klasse. Diese Methode akzeptiert eine Sammlung von Elementen, ein anzuwendendes Prädikat und einen booleschen Wert, der angibt, ob eine „OR“- oder „AND“-Operation ausgeführt werden soll.
In unserem Beispiel übergeben wir die Liste der Schlüsselwörter als Elemente, ein Prädikat, das prüft, ob das Kommentarfeld jedes Schlüsselwort enthält, und isOr auf true setzt, um eine „OR“-Operation durchzuführen. Dadurch wird sichergestellt, dass ein Datensatz, der eines der angegebenen Schlüsselwörter enthält, in den Ergebnissen enthalten ist.
Implementierung der FilterByItems-Erweiterungsmethode:
Die FilterByItems-Methode wird mithilfe der ExpressionReplacer-Klasse implementiert, die es uns ermöglicht, einen Teil des Ausdrucks zu ersetzen. Dies wird verwendet, um ein Prädikat zu generieren, das prüft, ob jedes Schlüsselwort vorhanden ist.
Beispielverwendung:
Um die FilterByItems-Methode zu verwenden, stellen wir einfach die zu filternde Sammlung und eine Liste der zu überprüfenden Schlüsselwörter bereit und setzen isOr optional auf true für eine „OR“-Operation oder auf false für eine „AND“-Operation.
// 过滤“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);
Das obige ist der detaillierte Inhalt vonWie kann ich mit Lambda/LINQ eine Sammlung effizient basierend auf mehreren Schlüsselwörtern filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!