Mar*_*son 26 .net c# linq filtering list
我有2个List对象(简化):
var fileList = Directory.EnumerateFiles(baseSourceFolderStr, fileNameStartStr + "*", SearchOption.AllDirectories);
var filterList = new List<string>();
filterList.Add("ThisFolderName");
filterList.Add("ThatFolderName");
我想过滤fileLst以仅返回包含filterList中任何文件夹名称的文件.(我希望这是有道理的..)
我尝试了以下表达式,但这总是返回一个空列表.
var filteredFileList = fileList.Where(fl => fl.Any(x => filterList.Contains(x.ToString())));
我似乎无法理解为什么我什么也得不到,显然我错过了什么,但我不知道是什么.
[编辑]
好的,所以看来我应该更清楚我的问题,我试图在我的fileList中搜索包含来自我的filterList的字符串值的子字符串中的文件.我已经为那些试图做类似事情的人标记了下面的答案.
fix*_*gon 51
它更容易:
fileList.Where(item => filterList.Contains(item))
如果您想要过滤不是完全匹配但是对于"包含",您可以使用此表达式:
var t = fileList.Where(file => filterList.Any(folder => file.ToUpperInvariant().Contains(folder.ToUpperInvariant())));
请尝试以下方法:
var filteredFileSet = fileList.Where(item => filterList.Contains(item));
当您遍历filteredFileSet(请参阅LINQ执行)时,它将包含一组IEnumberable值.这基于Where运算符检查以确保fileList数据集中的项目包含在filterList集合中.
由于fileList是一组IEnumerable字符串值,您可以将' item '值直接传递给Contains方法.