从VB.Net中的列表中删除重复的对象

时间:2016-06-14 15:48:43

标签: vb.net list object duplicates

我正在尝试根据companyID从列表中删除重复的对象。

如何通过列表进行集成并根据companyID删除对象。

{{1}}

3 个答案:

答案 0 :(得分:3)

首先不要添加它们。在添加到结果之前,使用Dictionary(如果您稍后将通过ID查找)或HashSet(如果您不知道)进行检查。这是HashSet示例:

Dim companyIDs As New HashSet(Of String)()  
While reader.Read()
    If Not companyIDs.Contains(reader("company").ToString()) Then
        companys.Add(New CompanySearch() With {
            .StartDate = reader("StartDate").ToString() & " (" & count & ")",
            .CompanyID = reader("company").ToString(),
            .Origin = reader("Origin").ToString(),
            .OriginName = reader("OriginName").ToString(),
            .Status = reader("status").ToString(),
            .StatusName = reader("statusname").ToString(),
            .Status = reader("status").ToString(),
            .FullLegalBusinessName = reader("fullLegalBusinessName"),
            .AmountRequestedText = reader("amountRequestedText"),
            .HowSoonNeededText = reader("howSoonNeededText"),
            .QueueID = reader("QueueID"),
            .Company = reader("Company"),
        })
    End If
    companyIDs.Add(reader("company").ToString())
End While

我还注意到,此对象中的.Company.CompanyID属性都是从阅读器中的company列填充的。这是故意的吗,还是您要查看.CompanyID的其他列?

此外,虽然我了解您现有的搜索SQL已经将这些公司行视为不同,但您应该回到那里的绘图板并重新考虑SQL,以便您真正获得不同的记录。也许使用嵌套查询或CTE首先查找与您的查询匹配的CompanyID值的投影,然后加入公司表以获取每个公司的详细信息,并在这些初始结果中包含ID。如果那是不可能的,你应该考虑使行不同的是什么,因为我保证一些列 IS 不同,如果你只是剔除一个记录或另一个你&# 39;可能显示来自错误行的用户错误数据

答案 1 :(得分:1)

使用此:

Dim distinctCompanys = companys.GroupBy(Function(x) x.CompanyID).Select(Function(y) y.First())

答案 2 :(得分:1)

您可以使用LINQ轻松过滤集合:

ng-false-value="0"

或者使用Dim companies = companys.Distinct(Function(c) c.CompanyID).ToList 代替,例如:

Dictionary(Of String, CompanySearch)

但我推荐分组,以便您可以在以下后检查重复项:

Dim companies As Dictionary(Of String, CompanySearch)

While reader.Read()
    Dim companyID = reader("company").ToString
    companies(companyID) = New CompanySearch() With {
        .StartDate = reader("StartDate").ToString & " (" & count & ")",
        .CompanyID = companyID,
        .Origin = reader("Origin").ToString,
        .OriginName = reader("OriginName").ToString,
        .Status = reader("status").ToString,
        .StatusName = reader("statusname").ToString,
        .Status = reader("status").ToString,
        .FullLegalBusinessName = reader("fullLegalBusinessName"),
        .AmountRequestedText = reader("amountRequestedText"),
        .HowSoonNeededText = reader("howSoonNeededText"),
        .QueueID = reader("QueueID"),
        .Company = reader("Company")
    }
End While