你有一个目录 C:\jimmybuffett\
此目录中有两个文本文件:
歌曲列表1.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();
}
关于C# Linq 查询在多个文本文件中搜索单个关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45511279/