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. Я отметил ответ ниже для тех, кто пытается сделать подобное.
Ответы
Ответ 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()));