#c# #asp.net #asp.net-mvc #c#-4.0
#c# #asp.net #asp.net-mvc #c#-4.0
Вопрос:
Я хочу сравнить два списка,у которых есть идентификатор свойств,номер, имя, поэтому я хочу сравнить оба списка, например, если в новом списке есть
Id Name Number 1 Test 1 2 Test2 2
и у Олдлиста есть
Id NewList Number 1 Test 1
поэтому, когда мы сравниваем оба списка, я должен показать текст, который добавлен в новый список Test2 , или если я удален из нового списка, то должен показать текст, который элемент удален в новой строке
вот мой код, который я пробовал
StringBuilder oldPref = new StringBuilder(); StringBuilder newPref = new StringBuilder(); newList = GetPref(NewInfo).OrderBy(p =gt; p.Number).Where(x =gt; x.Numbergt; 0).ToList(); OldList = GetPref(OldInfo).OrderBy(p =gt; p.Number).Where(x =gt; x.Numbergt; 0).ToList(); foreach (var item in OldList) { oldPref .Append(item.Name Environment.NewLine); } foreach (var item in newList) { newPref .Append(item.Name Environment.NewLine); } if (!String.Equals(oldPref , newPref )) { note.Append("Order Changed " Environment.NewLine); } note.Append("From " Environment.NewLine); note.Append(oldPref); note.Append("To " Environment.NewLine); note.Append(newPref);
кто-нибудь может мне помочь с этим, как я это делаю правильно, заранее спасибо
Комментарии:
1. Является ли идентификатор уникальным ключом, который идентифицирует каждый элемент в двух списках?
2. нет списка жестко закодированных значений, так что это похоже на oldlist я извлекаю список для этой записи из бд и получаю новый список из пользовательского интерфейса, затем сериализую оба списка, поэтому оба списка могут иметь одинаковое значение, если в старом и новом списке есть элементы с одинаковым номером, и если я изменюсь из пользовательского интерфейса, он должен быть другим, поэтому я хочу показать, что добавлен новый элемент или если я удаляю пользовательский интерфейс, элемент удаляется
Ответ №1:
Самый простой способ-выполнить итерацию по обоим спискам по одному за раз и посмотреть, содержит ли другой список каждый элемент списка, который повторяется:
Listlt;MyClassgt; oldList = ...; Listlt;MyClassgt; newList = ...; foreach(MyClass item in oldList){ if(newList.Contains(item) == false) { (insert logic for when item has been removed from oldList) } } foreach(MyClass item in newList){ if(oldList.Contains(item) == false) { (insert logic for when item has been added to oldList) } }