it-swarm.com.de

Linq-Filter Liste <String>, in der ein String-Wert aus einer anderen Liste <String> enthalten ist

Ich habe 2 Listenobjekte (vereinfacht):

var fileList = Directory.EnumerateFiles(baseSourceFolderStr, fileNameStartStr + "*", SearchOption.AllDirectories);

var filterList = new List<string>();
filterList.Add("ThisFolderName");
filterList.Add("ThatFolderName");

Ich möchte das fileLst filtern, um nur Dateien mit Ordnernamen aus der filterList zurückzugeben. (Ich hoffe das ergibt Sinn..)

Ich habe den folgenden Ausdruck ausprobiert, aber dies gibt immer eine leere Liste zurück.

var filteredFileList = fileList.Where(fl => fl.Any(x => filterList.Contains(x.ToString())));

Ich kann anscheinend nicht verstehen, warum ich nichts bekomme, offensichtlich fehlt mir etwas, aber ich habe keine Ahnung, was.

[BEARBEITEN]

Ok, es sieht so aus, als hätte ich meine Frage klarer formulieren sollen. Ich habe versucht, mit einer Teilzeichenfolge, die Zeichenfolgenwerte aus meiner Filterliste enthält, nach Dateien in meiner Dateiliste zu suchen. Ich habe die Antwort unten für diejenigen markiert, die versuchen, etwas Ähnliches zu tun.

26
Mark Johnson

es ist noch einfacher:

fileList.Where(item => filterList.Contains(item))

wenn Sie nicht nach einer exakten Übereinstimmung, sondern nach einem "enthält" filtern möchten, können Sie diesen Ausdruck verwenden:

var t = fileList.Where(file => filterList.Any(folder => file.ToUpperInvariant().Contains(folder.ToUpperInvariant())));
50
fixagon

Versuche Folgendes:

var filteredFileSet = fileList.Where(item => filterList.Contains(item));

Wenn Sie über filtersFileSet iterieren (Siehe LINQ-Ausführung ), besteht es aus einer Reihe von IEnumberable-Werten. Dies basiert auf der Überprüfung durch den Operator "Where", um sicherzustellen, dass Elemente in der Dateiliste in der Filterliste gesetzt.

Da fileList ein IEnumerable set of string values ist, können Sie das Element ' übergeben 'Wert direkt in die Contains-Methode.

8
Jamie Keeling

das kannst du machen

var filteredFileList = fileList.Where(fl => filterList.Contains(fl.ToString()));
1
Akrem