Подтвердить что ты не робот

Linq filter Список <string>, где он содержит строковое значение из другого списка <string>

У меня есть 2 объекта списка (упрощенный):

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

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

Я хочу отфильтровать файлLst, чтобы возвращать только файлы, содержащие любые имена папок из filterList. (Надеюсь, это имеет смысл.)

Я пробовал следующее выражение, но это всегда возвращает пустой список.

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

Я не могу понять, почему я ничего не получаю, ясно, что у меня что-то не хватает, но я понятия не имею, что.

[EDIT]

Итак, похоже, что я должен был быть более ясным в своем вопросе, я пытался искать файлы в своем файлеList с подстрокой, содержащей строковые значения из моего filterList. Я отметил ответ ниже для тех, кто пытается сделать подобное.

4b9b3361

Ответ 1

его еще проще:

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

если вы хотите отфильтровать не для точного соответствия, но для "содержит" вы можете использовать это выражение:

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

Ответ 2

Попробуйте следующее:

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

При повторном выполнении filterFileSet (см. выполнение LINQ) он будет состоять из набора значений IEnumberable. Это основано на проверке Where Operator, чтобы гарантировать, что элементы в наборе данных fileList содержатся в наборе filterList.

Поскольку fileList представляет собой IEnumerable набор строковых значений, вы можете передать элемент 'непосредственно в метод Содержит.

Ответ 3

вы можете сделать это

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