J'ai un problème que je suis sûr que quelqu'un ici a résolu plus facilement que ce que je pense à faire. J'ai une liste qui a un nom et un numéro. Le nom est requis et pourrait être en double et le numéro ne pourrait être qu'un, mais pas obligatoire.Comment changer la foncalité distincte dans .NET?
|name|number|
|A |2 |
|A | |
|B | |
|C | |
|C | |
|D |4 |
-------------
En ce moment je joue un list.Distinct() sur la partie du nom, mais il ne se soucie pas de la section numérique.
newlist = oldlist.Distinct().ToList();
Si un nom qui est en double a un numéro, je veux garder celui avec le numéro, ce qui ne se produit pas. Le cas de deux mêmes noms et deux numéros différents ne se produira pas. Des idées?
Encore une chose: En ce moment, je ne me soucie pas du tri puisque je m'en occupe.
J'ajoute tout le code pour une meilleure visibilité de l'équipe StackOverflow:
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();
}
Au-dessus de la mise en œuvre IEqualityComparer et au-dessous de l'appel Distinct.
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;
}
Vous pouvez fournir du code supplémentaire (qu'est-ce que 'oldList', à quoi ressemble la classe personnalisée, etc.). – Groo
Merci Groo pour votre commentaire. J'ai ajouté tout mon code lié à cette question, s'il vous plaît laissez-moi savoir si cela aide. – Geo