web-dev-qa-db-fra.com

Conversion d'un tableau de chaînes en chaîne séparée par des virgules avec concaténation supplémentaire

Est-il possible de convertir une liste de chaînes en chaînes séparées par des virgules?

String[] data = new String[] { "test", "abc", "123" }

Convertir en: 

'test', 'abc', '123'

Solutions possibles:

  1. Entourez chaque chaîne avec '', puis utilisez String.join dans la liste. 
  2. Foreach chaque chaîne de la liste et faire la concaténation de '' et ',' et à la fin, supprimer le dernier ','

Existe-t-il une simple Linq (expression d'une ligne) permettant de faire les deux?

7
Reddy

Existe-t-il une simple Linq (expression d'une ligne) permettant de faire les deux.

string.Join(",", data.Select(item => "'" + item + "'"))

Principes de base de Linq: Les transformations sont des instructions Select. Les filtres sont des instructions Where.

Cela dit, il existe de nombreux outils de manipulation de chaînes disponibles qui ne sont pas Linq, et ils sont plus susceptibles d'être optimisés pour les chaînes. Je me tournais donc toujours vers eux avant de regarder Linq.

19

Vous pouvez utiliser linq agrégé

Array.Skip(1).Aggregate(Array[0],(a,b) => string.Format("{0},'{1}'",a,b));
3
M.kazem Akhgary
String[] data = new String[]{"test","abc","123"};
var result = string.Join(",", data.Select(o => string.Concat("'",o,"'"));
1
Backs

Vous pouvez également utiliser la méthode Aggregate: Exemple:

List<string> fruit = new List<string> {"Apple", "Orange", "Pear", "Tomato", "Banana"};
var fruitSentence = fruit.Aggregate((current, next) => $"{current},{next}");
0
Espen

NOTE: si vous commencez avec IEnumerable ou similaire, vous devez appeler .ToArray () à la fin de l'instruction LINQ comme ceci:

input parameter: IEnumerable<string> feederIdList    

var feederListString = String.Join(",", feederIdList.Select(feeder => "\"" + feeder + "\"").ToArray());

Dans mon cas, j'avais besoin que chaque chaîne soit entourée de guillemets doubles pour pouvoir être transmise ultérieurement à une procédure stockée Oracle.

0
Josh P