对于每个使用linq如何使用其他

时间:2015-07-08 09:33:28

标签: vb.net linq

我有检查特定文件的代码,然后如果条件已满,则进入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

问题是如何在这里实施其他方式。

2 个答案:

答案 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)