2011-08-03 6 views
23
List<string> test = new List<string>(); 
test.Add("test's"); 
test.Add("test"); 
test.Add("test's more"); 
string s = string.Format("'{0}'", string.Join("','", test)); 

ahora la s es 'test's','test','test's more' pero necesito para reemplazar las comillas interiores con 2 comillas simplesÚnete a la lista de cuerda para separados por comas y encerrados entre comillas simples

como esto: 'test''s','test','test''s more'

actualización: Lo conseguí para trabajar como abajo, pero preferiría una manera más limpia si es posible.

string s = string.Format("`{0}`", string.Join("`,`", test)).Replace("'", "''").Replace("`", "'"); 

Respuesta

41

Esto debería funcionar:

List<string> test = new List<string>(); 
test.Add("test's"); 
test.Add("test"); 
test.Add("test's more"); 
string s = string.Join("','", test.Select(i => i.Replace("'", "''")).ToArray()); 

Y si usted está realmente en busca de encerrar todo el asunto entre comillas simples:

string s = string.Format("'{0}'", string.Join("','", test.Select(i => i.Replace("'", "''")).ToArray())); 
+1

ustedes son geniales. He estado apretando mi cabeza para hacer solo esto, pero esto no me vino a la mente. – gangt

+2

No creo que la llamada ToArray() sea necesaria. – JMS10

1

Siempre puede codificar las comillas antes de construir la cadena.

2

Prueba esto:

string s = string.Join(",", test.Select(x => string.Format("'{0}'", x.Replace("'", "''")))); 

Por cierto, no hay apóstrofe en "pruebas" - apóstrofes aren't used for plurals.

+0

:) Tienes razón. Inventé una lista de prueba, realmente no quise decir prueba. Solo algunos datos con apóstrofo es todo lo que quería. – gangt

2

No es del gusto de todos, pero me gusta para crear extensiones de ayuda para este tipo de tareas, y ponerlos en una "utilidad" espacio de nombres:

public static class ListExtensions 
{ 
    public static void AddDoubleQuoted(this List<string> list, string input) 
    { 
    input = input.Replace("'", "''"); 
    list.Add(input); 
    } 
} 

List<string> test = new List<string>(); 
test.AddDoubleQuoted("test's"); 
test.AddDoubleQuoted("test"); 
test.AddDoubleQuoted("test's more"); 
string s = string.Format("'{0}'", string.Join("','", test)); 
+0

este es genial, prefiero que el anterior sea porque lo necesito en un solo lugar para usarlo. Sin embargo, acabo de aprender a crear extensiones. Gracias. – gangt

+0

@gangt ¡No hay problema! La primera vez que aprendí extensiones pensé que también era increíble. – davecoulter

17

Esto puede ser más fácil que el uso de string.replace

string s = "'" + String.Join("','", test) + "'"; 
+1

Pero esto no escapa a las comillas simples. La solución de Jay Riggs es correcta para la situación del póster original. – JMS10

0

me gusta una versión sin reemplazar:

using System.Linq; 
(...) 
string s = String.Join(", ", from l in MyList select String.Format("'{0}'", l)); 
Cuestiones relacionadas