c# - C# Linq 在 where 中使用数组
问题描述
我想输出文件名数组中的所有值并通过 Where 指令将它们过滤掉。我试图循环它。问题是,这些值显示了两次。
var files = from file in Directory.EnumerateFiles(Path, "*.TXT", SearchOption.AllDirectories)
from line in File.ReadLines(file)
where line.Contains(Filename[i])
select new
{
File = file,
Line = line
};
foreach (var line in files)
{
Console.WriteLine($"{line.Line}");
}
解决方案
问题编辑后:
使用此代码获取现有文件:
var txtPath = Path.Combine(dirPath, txtFileName);
var txtLines = File.ReadAllLines(txtPath).ToList();
var filesFound = from file in Directory.EnumerateFiles(dirPath, "*.DST", SearchOption.AllDirectories)
where txtLines.Contains(Path.GetFileName(file))
select new
{
File = file,
Line = Path.GetFileName(file)
};
foreach (var line in filesFound)
Console.WriteLine($"{line.Line}");
使用此代码获取丢失的文件(名称):
var existingFiles = filesFound.Select(s => s.Line).ToList();
var missingFiles = txtLines.Except(existingFiles);
或者:
var txtPath = Path.Combine(dirPath, txtFileName);
var txtLines = File.ReadAllLines(txtPath).ToList();
var filesMissing = txtLines.Except(from file in Directory.EnumerateFiles(dirPath, "*.DST", SearchOption.AllDirectories)
where txtLines.Contains(Path.GetFileName(file))
select Path.GetFileName(file));
foreach (var line in filesMissing)
Console.WriteLine(line);
第二个的性能至少要好两倍。特别是如果您根本不需要 filePath --> 因为丢失的文件没有文件。
对于原始问题:
也许您有重复,因为您的 foder 中有 2 个文件,但您使用相同的文件名进行检查,或者您的文件中有 2 行与文件名匹配。
回答你的问题更重要的是:
您想过滤掉其中有自己名称的文件,还是只想在所有文件中有自己的名称时获取一次?
你选择了前者,所以解决方案:
var files = from file in Directory.EnumerateFiles(path, "*.TXT", SearchOption.AllDirectories)
from line in File.ReadLines(file)
where !line.Contains(System.IO.Path.GetFileName(file)) //note the exclamation mark, this is how you filter
select new
{
File = file,
Line = line
};
foreach (var line in files)
Console.WriteLine($"{line.Line}");
您可能注意到您不需要数组。
推荐阅读
- excel - Selection.ClearFormatting 无法运行
- azure - 在 Azure 和本地运行的应用程序
- asp.net-mvc - 有人可以解释一下如何
影响我的 ASP.net MVC 项目 - java - JavaFX 标签不更新高度
- c++ - 为什么这个派生类不是标准布局类?
- java - 部署到 heroku 时,Rest API 以 html 响应
- node.js - Node.js/Express - 如何限制上传文件的用户访问文件?
- xcode - 如何设置我的 NSSegmentedControl 的外观以匹配 Xcode 之一?
- java - 是否可以在java中创建一个“类对象”类?
- python - Tkinter 在鼠标右键和左键单击时按钮不同的命令