2017-08-17 123 views
0

我有一個我創建的CommissionStatement對象列表。我需要創建一個新列表,其中只包含基於3個屬性的列表中找到的重複項:公司;供應商;和Total(即,這3箇中的每一個必須在2個或更多個對象中相同,才能被識別爲重複)(VB.NET)根據多個屬性查找對象列表中的所有重複項

對象是此刻字符串的簡單對象。

Private Class CommissionStatement 
    Property Provider As String 
    Property Firm As String 
    Property Source As String 
    Property Media As String 
    Property Total As String 
    Property Received As String 
End Class 

我都CommissionStatments名單如下:

Dim fileLocation As String = importText.Text 
     Dim csvText As String = My.Computer.FileSystem.ReadAllText(fileLocation).Replace(", ", " ") 
     Dim providerString As String = "" 
     Dim allStatements = New List(Of CommissionStatement) 
     Dim countIndex As Integer = 0, maxIndex As Integer = csvText.Split(vbLf).Length 
     For Each line As String In csvText.Split(vbLf) 
      '' Remove the top row 
      countIndex += 1 
      If countIndex = 1 Then 
       Continue For 
      End If 
      statementProgress.Value = ((countIndex/maxIndex) * 100) 
      '' Build the New commissionStatement object and add it to the allStatements list 
      If Not line = "" Then 
       Dim commissionStatement = New CommissionStatement 
       With commissionStatement 
        .Provider = line.Split(",")(0) 
        .Firm = line.Split(",")(1) 
        .Source = line.Split(",")(2) 
        .Media = line.Split(",")(3) 
        .Total = line.Split(",")(4) 
       End With 
       providerString &= commissionStatement.Provider & "," 
       allStatements.Add(commissionStatement) 
      End If 
     Next 

第一篇文章在計算器上很抱歉,如果它不是很清楚!重複列表還需要包含來自allStatements列表的基於公司提供商和總數的重複列表CommissionStatements

回答

0

最好的辦法是使用lambda表達式。下面的函數應該可以做你所要求的。

Private Function GetDuplicateCommisionStatements(tempStatement As CommissionStatement) As List(Of CommissionStatement) 
    Return allStatements.FindAll(Function(x) x.Firm = tempStatement.Firm And x.Provider = tempStatement.Provider And x.Total = tempStatement.Total) 
End Function 

而且使用這樣的..

duplicatelist = GetDuplicateCommisionStatements(testCommisionStatement) 

使用自己的對象,當然名字。

順便說一句,你可以使用With語句就像縮短子下面

Private Function GetDuplicateCommisionStatements(tempStatement As CommissionStatement) As List(Of CommissionStatement) 
    With tempStatement 
     Return allStatements.FindAll(Function(x) x.Firm = .Firm And x.Provider = .Provider And x.Total = .Total) 
    End With 
End Function 
相關問題