2009-01-24 7 views
1

J'ai un objet sur le terrain et je créer une liste de champs:C# .NET 3.5 - Liste Effectuer des opérations similaires sur les membres d'une liste

class Field { 

string objectName; 
string objectType; 
string fieldName; 
string fieldValue; 

//constructor... 

} 



List<Field> fieldList = new List<Field>(); 

Supposons que je voulais interroger cette liste pour retourner une collection de Distinct les noms d'objets (pour être ensuite insérées dans un CheckedListBox. Comment dois-je procéder?

J'imagine un peu de magie LINQ peut gérer cela?

+0

Télécharger LINQpad, http://www.linqpad.net/. c'est un moyen facile d'apprendre LINQ –

Répondre

2

L'expression doit retourner une liste de distinc t les noms d'objets de la liste tels que définis. Je l'ai converti en une liste depuis les docs pour la propriété CheckedListBox DataSource a indiqué qu'il doit implémenter IList ou IListSource, pas simplement IEnumerable.

((ListControl)cbListBox).DataSource = fieldList.Select(f => f.objectName) 
               .Distinct() 
               .ToList()); 

Si l'accès au CheckedListBox comme ListControl ne donne pas accès à DataSource (parfois le mensonge docs), vous pouvez essayer:

cbListBox.Items.AddRange(fieldList.Select(f => f.objectName) 
            .Distinct() 
            .ToArray()); 
0
var q = from Field f in fileldList select f.objectName; 

chkBoxList.DataSource = q.Distinct(); 
0

Chacune de ces travaux

utilisant var

1) var fieldNameCollection = à partir de f dans fieldList, sélectionnez f.FieldName; 2) Syntaxe Lambda var fieldNameCollection = fieldList.Select (f => f.FieldName); Alternativement, au lieu d'utiliser var, vous pouvez également utiliser IEnumerable fieldNameCollection = fieldList.Select (f => f.FieldName);

Questions connexes