【问题标题】:C# Linq .Contains list of stringC# Linq .包含字符串列表
【发布时间】:2016-09-01 12:20:36
【问题描述】:

如何检查其中 line.Contains("One") 多个字符串?例如选择文件如何包含带有“名称”列表的文本元素的行。

private void button_Click(object sender, RoutedEventArgs e)
{
  List<string> names = new List<string>() { "One", "Two", "Three" };

  try
  {
    var files = from file in Directory.EnumerateFiles(@"D:\Logs\", "*.log", SearchOption.AllDirectories)
                from line in File.ReadLines(file)
                where line.Contains("One")
                select new
                {
                  File = file,
                  Line = line
                };

    foreach (var f in files)
    {
      Debug.WriteLine("{0}\t{1}", f.File, f.Line);
    }
    //MessageBox.Show(files.Count().ToString() + " record found.");
    }
  catch (UnauthorizedAccessException UAEx)
  {
    Console.WriteLine(UAEx.Message);
  }
  catch (PathTooLongException PathEx)
  {
    Console.WriteLine(PathEx.Message);
  }
}

【问题讨论】:

  • 你的意思是line.Contains("One") || line.Contains("names")?
  • 抱歉,能否请您稍微澄清一下您的问题。英文有点不清楚。
  • 你需要使用any而不是Contains

标签: c# linq contains


【解决方案1】:
var files = from file in Directory.EnumerateFiles(@"D:\Stary komp\Logi\Logs2\", "*.log", SearchOption.AllDirectories)
            from line in File.ReadLines(file)
            where names.Any(name => line.Contains(name))
            select new
            {
              File = file,
              Line = line
            };

【讨论】:

  • 谢谢!工作正常。
【解决方案2】:

你也许可以尝试使用这样的东西:

line.Intersect(names).Any()

不过,我不确定它是否可以在 Linq 表达式中工作?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2023-03-14
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多