Cómo detectar si el orden de dos listas ha cambiado y si ha cambiado, entonces mostrar los nuevos miembros agregados o eliminados en C#.
Quiero comparar dos listas que tienen las propiedades Id, Number, Name, por lo que quiero comparar ambas listas.
Por ejemplo, si NewList tiene:
Id Nombre Num
1 Prueba 1
2 Prueba2 2
Y Oldlist tiene:
Id NewList Number
1 Prueba 1
Así que cuando comparo ambas listas, debería mostrar un texto que en NewList se agregó Prueba2 o si se eliminó de la nueva lista, debería mostrar un texto que el elemento fue eliminado en una nueva línea.
Aquí está el código que he intentado:
StringBuilder oldPref = new StringBuilder();
StringBuilder newPref = new StringBuilder();
newList = GetPref(NewInfo).OrderBy(p => p.Number).Where(x => x.Number> 0).ToList();
OldList = GetPref(OldInfo).OrderBy(p => p.Number).Where(x => x.Number> 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("Cambio en el pedido " + Environment.NewLine);
}
note.Append("De " + Environment.NewLine);
note.Append(oldPref);
note.Append("A " + Environment.NewLine);
note.Append(newPref);
¿Alguien puede ayudarme con esto? Como puedo hacerlo correctamente. Gracias de antemano.
davy.ai
Para comparar dos listas con las propiedades
Id, Number, Name
, puede utilizar los métodosExcept
eIntersect
. Aquí hay un ejemplo de fragmento de código:Donde
ItemComparer
es una clase que implementaIEqualityComparer<item>
para comparar los ítems en base a su propiedad deId
:Este código producirá la siguiente salida:
Puede modificar este código para que se adapte a sus requerimientos específicos.