【发布时间】:2013-03-30 13:47:20
【问题描述】:
我有 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 的字符串值的子字符串。对于那些尝试做类似事情的人,我在下面标记了答案。
【问题讨论】:
-
你为什么使用 any ? var filtersFileList = fileList.Where(fl => filterList.Contains(fl));
-
我认为,对于您的表达式,您采用单个文件列表而不是 x 将是一个 char ,它看起来 filterList 是否包含字符。(字符串变为 IEnumerable
) -
@David Tryon - 我以前没有使用过 Intersect,虽然运行它,但当我知道它应该包含一些值时,我得到一个空列表: var filteredFileList = fileList.Intersect(filterList);跨度>
-
@DavutGürbüz - 同样,对于您的简化查询(我正在使用 .Any,因为我已经做了很多不同的示例。)我没有返回任何结果。我知道我的 fileList 中有字符串,其中包含 filterList 中的字符串。我承认有点难过..
-
fileList.Intersect(filteredFileList) 正如@DavinTryon所说的那样是一条捷径。
标签: c# .net linq list filtering