-4

我正在开发一个应用程序来执行文件内的搜索,我编写了以下代码来执行此操作:

        foreach (var file in filesInDir)
        {
            string[] lines = File.ReadAllLines(file.FullName);
            for(int i=0;i<lines.Length;i++)
                if(lines[i].Contains("123456789"))
                    Console.Write("File: {0}\nLine: {1}", file.FullName, i + 1);
        }

所以,我想知道如何使用 Linq 完成这项研究,这可能吗?

4

2 回答 2

9

选择该行以及索引(行号),然后查询您的字符串,然后选择LineNo类似:

var result = lines.Select((r, i) => new { line = r, index = i })
                .Where(r => r.line.Contains("123456789"))
                .Select(r => new { LineNo = r.index });

显示:

foreach(var item in result)
    Console.Write("File: {0}\nLine: {1}", file.FullName, item.LineNo);

编辑

您还可以对目录中的所有文件尝试以下操作,例如:

var result = filesInDir.Select(t => new { lines = File.ReadAllLines(t.FullName), FileName = t.Name })
           .Select((r, i) => new { line = r.lines, index = i, FileName = r.FileName })
           .Where(r => r.line.Contains("123456789"))
           .Select(r => new { FileName = r.FileName,  LineNo = r.index });

然后进行显示:

foreach (var item in result)
    Console.Write("File: {0}\nLine: {1}", item.FileName, item.LineNo);
于 2013-07-30T13:18:16.407 回答
4
var lines = File.ReadAllLines(file.FullName).ToList();    

lines.Where(x=>x.Contains("123456790")).ToList().ForEach(x=>Console.Write("File: {0}\nLine: {1}", x.FullName, lines.IndexOf(x)));
于 2013-07-30T13:16:35.867 回答