33 Stimmen

Linq Distinct() by name zum Auffüllen einer Dropdown-Liste mit Name und Wert

Ich versuche, eine Dropdown-Liste mit Pharmaunternehmen wie Bayer, Medley usw. zu füllen. Ich erhalte diese Namen aus der Datenbank, und diese Namen werden in der Datenbank wiederholt, aber mit unterschiedlichen IDs.

Ich versuche, Linq Distinct() zu verwenden, aber ich möchte nicht den Gleichheitsvergleicher verwenden. Gibt es einen anderen Weg?

Meine Dropdown-Liste muss mit der ID und dem Namen des Unternehmens gefüllt werden.

Ich versuche etwas wie:

var x = _partnerService
           .SelectPartners()
           .Select(c => new {codPartner = c.codPartner, name = c.name})
           .Distinct();

Dies zeigt wiederholte Unternehmen in ddl.

Danke!

0 Stimmen

Wenn ein Unternehmen mehrfach mit verschiedenen Kennungen erscheint und Sie möchten, dass es nur einmal erscheint, welche Kennung soll dann angezeigt werden? Die erste? Spielt das keine Rolle?

1voto

Johan Leino Punkte 3445

Distinc verwendet GetHashCode, wenn Sie ihm nicht (über einen IEqualityComparer) mitteilen, eine andere Methode zu verwenden. Sie könnten einen generischen EqualityComparer verwenden, etwa so:

public class GenericEqualityComparer<T> : IEqualityComparer<T>
{    
    private Func<T, T, Boolean> comparer;    

    public GenericEqualityComparer(Func<T, T, Boolean> comparer)    
    {        
        this.comparer = comparer;    
    }    

    #region IEqualityComparer<T> Implementation

    public bool Equals(T x, T y)    
    {        
        return comparer(x, y);    
    }    

    public int GetHashCode(T obj)    
    {
        return obj.GetHashCode();  
    }    

    #endregion
}

und dann wie folgt verwenden (in etwa)

public static IEqualityComparer<YourType> MyComparer
{
   get
     {
      return new GenericEqualityComparer<YourType>((x, y) =>
       {
          return x.name.Equals(y.name);
        });
      }
}

0voto

Scott Ivey Punkte 39470

Übergeben Sie einfach Ihren eigenen Vergleicher an die Distinct-Methode, indem Sie eine der anderen Überladungen verwenden.

(extension) IQueryable<T> IQueryable<T>.Distinct( IEqualityComparer<T> comparer )

0 Stimmen

Wenn es mehrere Unternehmen mit demselben Namen, aber unterschiedlicher Kennung gibt, wie würden Sie dann die zu verwendende Kennung auswählen?

0 Stimmen

Ich stimme zu, dass die Wahl der ID ein Problem darstellen würde. Wenn Sie eine bestimmte ID für jeden wollen, mit einem eindeutigen mit einem EqualityComparer wahrscheinlich wäre nicht der Weg zu gehen. Auch, halten Sie im Hinterkopf auf die downvote hier, dass die ursprüngliche Frage sagte nichts über die Auswahl einer bestimmten ID für jedes Element in der eindeutigen Ergebnisse...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X