2017-05-29 16 views
0

J'ai un objet avec beaucoup de variables et je voulais une fonction distincte qui comparerait deux variables (customerid, statut) pour considérer les doublons, j'utilise la comparaison ci-dessous pour cela, mais je souhaite choisir la priorité dans la façon dont la fonction distincte va supprimer les doublons.Supprimer la priorité pour distinct

Il existe une variable de chaîne appelée "fichier" qui aura le nom d'un fichier (tous avec la même extension), mais 3 différents suffixes possibles avant l'extension ("", "_ 0", "TEXT"). exemple

"file_Name.txt"

"file_Name_0.txt"

"file_Name_TEXT.txt"

Quand il y a un double, je souhaite "file_Name.txt" priorité sera accordée à rester. Comment puis je faire ça?

class CustomerComparer : IEqualityComparer<Customer> 
{ 

    public bool Equals(Customer x, Customer y) 
    { 
     if (Object.ReferenceEquals(x, y)) return true; 

     if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null)) 
      return false; 

     return x.customerid == y.customerid && x.status == y.status; 
    } 

    public int GetHashCode(Customer aprov) 
    { 
     if (Object.ReferenceEquals(aprov, null)) return 0; 

     int hashProductName = aprov.status == null ? 0 : aprov.status.GetHashCode(); 

     int hashProductCode = aprov.customerid.GetHashCode(); 

     return hashProductName^hashProductCode; 
    } 

} 

Répondre

0

Je pense que vous pouvez regrouper vos clients:

var filteredCustomers = new List<Customer>(); 
    var separators = new string[] { "_", ".txt" }; 

    foreach (var customers in allCustomers.GroupBy(c => new { Id = c.customerid, Status = c.status })) 
    { 
     Customer uniqueCustomer = customers.FirstOrDefault(c => 
     { 
      var lastPart = c.file.Split(separators, StringSplitOptions.RemoveEmptyEntries).LastOrDefault(); 
      if (lastPart != "TEXT" && lastPart != "0") 
      { 
       return true; 
      } 
      return false; 
     }); 
     if (uniqueCustomer == null) 
     { 
      uniqueCustomer = customers.FirstOrDefault(); 
     } 
     filteredCustomers.Add(uniqueCustomer); 
    } 

En outre, il est possible de changer la logique de trouver le client primaire (par exemple à utiliser RegEx) et le déplacer vers votre classe à la clientèle comme une propriété ou méthode.