Ich habe ein Problem, dass ich sicher bin, dass jemand hier draußen einfacher gelöst hat, als was ich denke, zu tun. Ich habe eine Liste mit Namen und Nummer. Name ist erforderlich und könnte doppelt sein und die Nummer könnte nur eins sein, aber nicht erforderlich.Wie ändere ich Distinct Funcationality in .NET?
|name|number|
|A |2 |
|A | |
|B | |
|C | |
|C | |
|D |4 |
-------------
In diesem Moment bin ich die Durchführung einer list.Distinct() auf dem Namensteil, aber es über die Anzahl Abschnitt kümmert sich nicht darum.
Wenn ein Name, der Duplikat ist, eine Nummer hat, möchte ich den einen mit der Nummer behalten, was nicht passiert. Der Fall von zwei gleichen Namen und zwei verschiedenen Zahlen wird nicht passieren. Irgendwelche Ideen?
Noch eine Sache: In diesem Moment interessiere ich mich nicht für das Sortieren, da distinct darauf achten.
Ich füge den gesamten Code für eine bessere Sichtbarkeit des Stackoverflow Team:
class _ClientComparer : IEqualityComparer<_Client>
{
#region IEqualityComparer<_Client> Members
public bool Equals(_Client x, _Client y)
{
if ((x.ClientNumber != 0) && (y.ClientNumber != 0))//Both clients with numbers
if (x.ClientNumber == y.ClientNumber)//both clients number the same then same clients.
return true;
else //if not the same they are different
return false;
else if (x.ClientName == y.ClientName)
return true;
else
return false;
}
public int GetHashCode(_Client obj)
{
if (obj.ClientNumber != 0)
return obj.ClientNumber.GetHashCode();
else
return obj.ClientName.GetHashCode();
}
Oberhalb der IEqualityComparer Implementierung und unterhalb der Distinct Anruf.
public List<_Client> CollectAllClients()
{
List<_Client> ClientList = new List<_Client>();
while (this.Read())
{
if (GetClientNumber() != 0)
ClientList.Add(CreateClientInstance());
else
ClientList.AddRange(CreateClientsInstance());
}
ClientList = ClientList.Distinct<_Client>(new _ClientComparer()).ToList<_Client>() ;
return ClientList;
}
Sie könnten zusätzlichen Code angeben (was genau ist 'oldList', wie sieht die benutzerdefinierte Klasse aus etc.). – Groo
Danke Groo für Ihren Kommentar. Ich habe meinen gesamten Code zu dieser Frage hinzugefügt. Bitte lassen Sie mich wissen, ob dies hilfreich ist. – Geo