我想在下面的代码中使用linq where子句。我试过foreach循环,它的工作完美。但foreach循环需要更多时间来处理大量数据。请通过使用linq where子句给出任何有价值的建议以获得结果。
string path = @"D:/NewFolder";
var _path = Directory.GetFiles(path);
foreach (var file in _path)
{
foundFile = Path.GetFileNameWithoutExtension(file);
if (foundFile == PumpSelectedItem.PumpGuid)
{
fileName = foundFile;
isValidFileFound = true;
}
}
答案 0 :(得分:0)
就个人而言,我认为循环很好,但Linq中的功能等价物将是:
fileName = _path.Select(file => Path.GetFileNameWithoutExtension(file))
.Where(fileName => fileName == PumpSelectedItem.PumpGuid)
.LastOrDefault();
isValidFileFound = (fileName != null);
请注意,我使用LastOrDefault
的原因是因为在找到文件后继续循环,因此找到的最后一个文件将是您的结果。如果这不是您的意图,那么您可以使用FirstOrDefault
或在找到一个后更改您的循环。
但foreach循环需要花费更多时间来处理大量数据
Linq不会让它变得更快。当你找到第一个匹配的文件时停止会更快。 FirstOrDefault()
会有效地执行此操作,向break
循环添加foreach
也是如此。如果没有找到文件,那么性能将是相同的(它将循环遍历所有文件)。
答案 1 :(得分:0)
这可能稍好一点。请注意,我使用EnumerateFiles
代替GetFiles
。
var fileName = Directory.EnumerateFiles(path)
.Select(Path.GetFileNameWithoutExtension)
.Where(f => f == PumpSelectedItem.PumpGuid)
.FirstOrDefault();
如果没有找到文件, fileName
为空。
我假设你想要在找到第一场比赛时停止寻找。