2011-01-06 11 views
10

Próbuję uzyskać różne nazwy FullNames z listy zawierającej nazwy pełne i identyfikatory, a następnie wyświetlając je w kontrolce listBox. Czy istnieje prosty sposób na zrobienie tego? Dzięki BenUzyskaj wartości właściwości Distinct z listy

using (DB2DataReader dr = command.ExecuteReader()) 
      { 
       while (dr.Read()) 
       { 

       Contact contact = new Contact(); 

       contact.ContactID = Convert.ToInt32(dr["CONTACT_ID"]); 
       contact.FullName= dr["FULL_NAME"].ToString(); 


       myContacts.Add(contact); 

       //contactsListBox.ItemsSource = myContacts.Distinct FullName?? 


      } 
     } 

Odpowiedz

16

z LINQ:

var uniqueNames = myContacts.Select(c => c.FullName).Distinct().ToList(); 

powinno działać. Jeśli kolejność jest nieistotna można również użyć:

var names = new HashSet<string>(); 
while(dr.Read()) { 
    ... 
    names.Add(contact.FullName); 
} 

(a następnie użyć ToList()/OrderBy co trzeba)

+0

Wielkie dzięki! A co z ItemsSource, co powinno być ustawione? – Ben

+0

przypuszczalnie uniqueNames. Nie mogę w tej chwili sprawdzić, –

+0

Dzięki, że próbowałem, ale bez powodzenia będzie się z tym bawić. – Ben

0

myślę, że można stosować różne podejścia tutaj:

  1. Bądź Sql zapytanie wysyłające zapytania do różnych wartości.

  2. Sprawdź, czy kontakt znajduje się już na liście. Takie podejście zakłada, że ​​twoja klasa musi przedefiniować operatora euqality. Możesz też sprawdzić, czy ten identyfikator kontaktu jest już na liście.

  3. Użyj zapytania Linq, jak wspomniano powyżej.

+0

Pozdrowienia Poszedłem do opcji Linq – Ben

Powiązane problemy