まず、新しいアラートを取得してデシリアライズします。ここでは、CommandIDとAlertIDの2つのプロパティだけを比較する必要があります。他のものはすべて無視することができます。結果を比較するのが簡単だったと思われる新しいオブジェクトを作成します。その他のプロパティはすべてnullになります。リスト間の新規アイテムと既存アイテムを取得する
List<AlertModel> alerts = JsonConvert.DeserializeObject<List<AlertModel>>(json)
.Select(x => new AlertModel() { CommandID = x.CommandID, AlertID = x.AlertID }).ToList();
は今、私はすでに私たちは警告がすでに存在しているものを引っ張っ
List<AlertModel> newAlerts = alerts.Except(currentAlerts).ToList();
次の存在しない新しいアラートを見つけたいです。
List<AlertModel> existingAlerts = currentAlerts.Intersect(alerts).ToList();
新しいアラートと既存のアラートが保存されます。
currentAlerts.Clear();
currentAlerts.AddRange(newAlerts);
currentAlerts.AddRange(existingAlerts);
第一の実行alerts
は1つの項目newAlerts
は、1つの項目が含まれており、existingAlerts
は、彼らが必要として0が含まれていますが含まれています。
2回目の通過は私が期待していたものではありません。
alerts
には1が含まれています。
newAlerts
1を含み、これが0 currentAlertsなければならないalerts
existingAlerts
に0が含まれており、同一のCommandIDに及びAlertIDはcurrentAlerts
とalerts
に存在するので、これが1であるべきであるとまったく同じCommandIDに及びAlertIDを含有します。
ここには何が欠けているのかわかりませんが、これを行うにはより良い方法があります。
あなたは 'AlertModel'クラスで正しく' GetHashCode'と 'Equals'を実装しましたか? –
私はあなたに例を挙げたり、それについての投稿を私に指摘することはできません。 – Tsukasa
[MSDN](https://msdn.microsoft.com/en-us/library/ms182358.aspx)は、開始する場所です。 [This](https://msdn.microsoft.com/en-us/library/336aedhh(v = vs.100).aspx)または[これ](http://stackoverflow.com/q/10454519/6400526) –