同じユーザー定義型のリストが 2 つあります。それぞれ、ID、TimesTested、varA、varB で構成されます。
リストを結合して、ローカル ファイルに保存する必要があります。重複するエントリは削除する必要があります。
問題は、「TimesTested」の値が高いエントリを常に保持する必要があるため、ID を検索して既に存在するかどうかを確認できないことです。
リストの両方をループして戻り、値を手動で確認したくありません。だから私はLINQを考えています。
私が与えた場合、次のことを行うことは可能ですか:
4, 16, X, Y
4, 19, X, Y
2行目だけを保持するには?(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