2010-09-29 4 views
17

J'ai une classeCollection à chaîne en utilisant LINQ

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

List<Person> PersonList = new List<Perso>(); 
PersonList.Add(new Person() { FirstName = "aa", LastName = "AA" }); 
PersonList.Add(new Person() { FirstName = "bb", LastName = "BB" }); 

Je voudrais obtenir une chaîne avec un séparateur virgule pour le LastName, en utilisant Linq, le résultat ressemble à: AA, BB

Merci,

+0

.NET 3.5 ou 4.0? –

Répondre

42

Si vous utilisez .NET 4:

string lastNames = string.Join(",", PersonList.Select(x => x.LastName)); 

Si vous utilisez .NET 3.5:

string lastNames = string.Join(",", PersonList.Select(x => x.LastName) 
               .ToArray()); 

(En gros .NET 4 avait quelques surcharges supplémentaires ajoutés à string.Join.)

7

Vous pouvez utiliser

PersonList.Select(p => p.LastName).Aggregate((s1,s2) => s1 + ", " + s2); 
+0

Belle alternative! –

8

Pour concaténer des éléments de chaîne, avec des séparateurs, vous pouvez utiliser String.Join

Dans .NET 3.5 et ci-dessous, cela prend un tableau comme deuxième paramètre, mais dans 4.0 il a une surcharge qui prend un IEnumerable<T>, où T dans ce cas est String. Armé de cette information, voici le code que vous voulez.

Pour .NET 3.5:

string result = String.Join(", ", 
    (from p in PersonList 
    select p.LastName).ToArray()); 

Pour .NET 4.0, vous pouvez omettre l'appel à ToArray:

string result = String.Join(", ", 
    from p in PersonList 
    select p.LastName); 

Si vous souhaitez déposer la LINQ syntaxe et il suffit d'utiliser l'extension LINQ méthodes, voici la même chose dans cette variante:

Pour .NET 3.5:

string result = String.Join(", ", PersonList.Select(p => p.LastName).ToArray()); 

Pour .NET 4.0, vous pouvez omettre l'appel à ToArray:

string result = String.Join(", ", PersonList.Select(p => p.LastName)); 

Remarque: Les travaux 3.5 variantes ci-dessus bien sûr en 4.0 et, ils ne retirer ou remplacer la vieille méthode, ils ont juste ajouté un pour le cas typique.

Questions connexes