【问题标题】:Linq filter List<string> where it contains a string value from another List<string>Linq 过滤器 List<string> 其中包含来自另一个 List<string> 的字符串值
【发布时间】: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


【解决方案1】:

更简单:

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

如果您想要过滤的不是精确匹配而是“包含”,您可以使用以下表达式:

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

【讨论】:

  • 我认为它也应该像这样简单,但是由于某种原因,我的过滤列表是空的,当我知道它应该包含一些字符串值时,我会不会丢失别的地方?
  • 确保目录名真的相等 --> "c:\test" 不等于 "c:\TEST\"
  • 别忘了检查那里的空值。
【解决方案2】:

尝试以下方法:

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

当您迭代 filteredFileSet(请参阅LINQ Execution)时,它将由一组 IEnumberable 值组成。这是基于 Where Operator 检查以确保 fileList 数据集中的项目包含在 filterList 集中。

由于 fileListIEnumerable set of string values,因此您可以将 'item' 值直接传递给 Contains 方法。

【讨论】:

    【解决方案3】:

    你可以这样做

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2013-03-14
      相关资源
      最近更新 更多