Сначала мы вытаскиваем новые оповещения и десериализируем их. Теперь мне нужно только 2 свойства, которые нужно сравнить: CommandID и AlertID, все остальные можно игнорировать, поэтому я создаю новый объект, который, как я полагал, было бы легче сравнить результаты. Все остальные свойства становятся нулевыми.Получить новые и существующие элементы между списками
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 содержит тот же самый CommandID и AlertID как в alerts
existingAlerts
содержит 0, и это должно быть 1, так как то же самое CommandID и AlertID существует в currentAlerts
и alerts
.
Не уверен, что мне не хватает здесь, и, возможно, есть лучший способ сделать это.
ли вы что правильно '' GetHashCode' и Equals' в вашем 'AlertModel' классе? –
Я не могу привести пример или указать мне сообщение об этом. – Tsukasa
[MSDN] (https://msdn.microsoft.com/en-us/library/ms182358.aspx) - это место для начала. [Это] (https://msdn.microsoft.com/en-us/library/336aedhh (v = vs.100) .aspx) тоже. Или [это] (http://stackoverflow.com/q/10454519/6400526) –