Linq过滤器列表其中包含来自另一个List的字符串值

本文关键字:string List 另一个 字符串 列表 过滤器 Linq 包含 | 更新日期: 2023-09-27 18:07:57

我有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的字符串值的子字符串。

Linq过滤器列表<string>其中包含来自另一个List<string>的字符串值

我把答案标记在下面,以供那些试图做类似事情的人参考。

更容易:

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是一个可枚举的字符串值集合,因此可以将的值直接传递给Contains方法。

你可以这么做

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

Select * from employeeWhere cityID in (select cityID from cities Where countryID=1)