2017-08-17 125 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 
相关问题