C# Linq 查询在多个文本文件中搜索单个关键字

C# Linq query search for a single keyword in multiple text files

您有一个目录C:\jimmybuffett\

在这个目录中有两个文本文件: songlist1.txt

这里是里面的文字songlist1.txt:

Margaritaville

Boat Drinks

Fins

第二个文件是: songlist2.txt

这里是里面的文字songlist2.txt:

Margaritaville

Boat Drinks Fins

我正在尝试编写一个 Linq 查询来搜索文件夹 jimmybuffett 中的所有文件并查找包含歌曲名称“Fins”的文件。

这是我的:

using System;
using System.Linq;
using System.IO;

class Program
{
    public static void Main(string[] args)
    {
        String strPath = @"C:\jimmybuffett";
        String strSong = "Fins";

        var songs = from song in Directory.GetFiles(strPath, "*", SearchOption.AllDirectories)
                    where File.ReadAllLines(song).Contains(strSong)
                    select song;

        foreach(var song in songs)
        {
            Console.WriteLine(song);
        }

        Console.WriteLine("Press <enter> to continue");
        Console.ReadLine();
    }
}

此 Linq 查询找到 songlist1.txt,因为搜索词“Fins”在单独的一行中。

但是 songlist2.txt 未找到,因为搜索词“Fins”与“Boat Drinks”在同一行。

我的问题是如何修改我的 Linq 查询,以便我能够识别行中任何位置包含搜索词的文件。

这将是一个类似 %Fins% SQL 的查询。

我知道我可以使用正则表达式,但我想知道我是否可以直接从我的 Linq 查询中执行此操作。

谢谢

你可以使用 Any 喜欢这个代码:

static void Main(string[] args)
        {


        String strPath = @"C:\jimmybuffett";
        String strSong = "Fins";

        var songs = from song in Directory.GetFiles(strPath, "*", SearchOption.AllDirectories)
                    where File.ReadAllLines(song).Any(x=>x.Contains(strSong))
                    select song;

        foreach(var song in songs)
        {
            Console.WriteLine(song);
        }

        Console.WriteLine("Press <enter> to continue");
        Console.ReadLine();
    }