我确实有 2 个相同用户定义类型的列表。每个包括:ID、TimesTested、varA、varB。
需要加入列表,然后将其保存到本地文件。需要删除重复条目。
问题是我不能只搜索 ID 并检查它是否已经存在,因为我总是需要保留“TimesTested”具有较高值的条目。
我真的不想循环遍历两个列表并手动检查值。所以我在考虑LINQ。
如果我已经给出,是否可以执行以下操作:
4, 16, X, Y
4, 19, X, Y
只保留第二行?(使用 LINQ,或以另一种“智能”方式)
如果是的话,你能告诉我怎么做吗?
奇怪的是,当我第一次从本地文件加载值时它起作用了。第一次保存似乎也很顺利......但是当我尝试第二次将列表写入文件时......我收到以下错误:
Unable to cast object of type "WhereSelectEnumerableIterator`2[System.Linq.IGrouping`2[System.Int32,mcq_gui.clsEvaluation+History+EvaluationQuestionData],mcq_gui.clsEvaluation+History+EvaluationQuestionData]" to type Typ "System.Collections.Generic.List`1[mcq_gui.clsEvaluation+History+EvaluationQuestionData]"
这是我正在使用的代码:
Friend Shared Function GetNewerEvalQs(list1 As List(Of EvaluationQuestionData), list2 As List(Of EvaluationQuestionData)) As List(Of EvaluationQuestionData)
Dim uniques As New List(Of EvaluationQuestionData)
Try
If list1.Count > 0 And list2.Count > 0 Then
uniques = list1.Concat(list2).GroupBy(Function(t) t.ID).[Select](Function(g) g.OrderByDescending(Function(t) t.TimesTested).First())
Else
If list1.Count > 0 Then
Return list1
ElseIf list2.Count > 0 Then
Return list2
Else
Return Nothing
End If
End If
Return uniques
Catch ex As Exception
Debug.Print(ex.Message)
Return Nothing
End Try
End Function