我正在尝试根据companyID从列表中删除重复的对象。
如何通过列表进行集成并根据companyID删除对象。
{{1}}
答案 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