我有检查特定文件的代码,然后如果条件已满,则进入stats.matching ....我正在使用每个linq:
For Each file As String In From file1 In Stats.FoundFiles
Let ftpFile = Utils.ToLowerWithoutSpaces(file1)
Where ftpFile.Contains(currentReportName)
Select file1
Stats.MatchingFiles.Add(file)
Next
问题是如何在这里实施其他方式。
答案 0 :(得分:3)
因此,您希望使用不包含该单词的文件填充另一个集合。
Dim matching = From file1 In Stats.FoundFiles
Let ftpFile = Utils.ToLowerWithoutSpaces(file1)
Where ftpFile.Contains(currentReportName)
Dim mismatching = From file1 In Stats.FoundFiles
Let ftpFile = Utils.ToLowerWithoutSpaces(file1)
Where Not ftpFile.Contains(currentReportName)
For Each file As String In matching
Stats.MatchingFiles.Add(file)
Next
For Each file As String In mismatching
Stats.MismatchingFiles.Add(file)
Next
这是一个简单的解决方案,您也可以使用效率更高的Except
:
Dim mismatching = Stats.FoundFiles.Except(matching)
答案 1 :(得分:0)
我认为在您的情况下,原始For Each
循环If... Else
将非常简单
并且仅Stats.FoundFile
循环
For Each file As String In Stats.FoundFiles
Dim ftpFile As String = Utils.ToLowerWithoutSpaces(file)
If ftpFile.Contains(currentReportName) = True Then
Stats.MatchingFiles.Add(file)
Else
Stats.MismatchingFiles.Add(file)
End If
Next
或者如果你是LINQ的粉丝并且必须使用它,那么你可以使用Aggregate
扩展方法
Stats.FoundFiles.Aggregate(String.Empty,
Function(seed, file)
If Utils.ToLowerWithoutSpaces(file).Contains(file) Then
Stats.MatchingFiles.Add(file)
Else
Stats.MismatchingFiles.Add(file)
End If
Return String.Empty
End Function)