42
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));

now the s is 'test's','test','test's more' but I need to replace the inner quotes with 2 single quotes

like this: 'test''s','test','test''s more'

update: I got it to work as below, but I would prefer a cleaner way if possible.

string s = string.Format("`{0}`", string.Join("`,`", test)).Replace("'", "''").Replace("`", "'");
Eric J.
  • 143,945
  • 62
  • 324
  • 540
GaneshT
  • 3,731
  • 13
  • 50
  • 81

7 Answers7

69

This should work:

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("'", "''")));

And if you're really looking to enclose the whole thing in single quotes:

string s = string.Format("'{0}'", string.Join("','", test.Select(i => i.Replace("'", "''"))));
Jay Riggs
  • 52,110
  • 9
  • 138
  • 148
29

This may be easier than using string.replace

string s = "'" + String.Join("','", test) + "'";
Scott
  • 20,853
  • 8
  • 63
  • 72
CraigH
  • 299
  • 3
  • 2
3

Try this:

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

By the way, there's no apostrophe in "tests" - apostrophes aren't used for plurals.

Simon MᶜKenzie
  • 7,945
  • 13
  • 48
  • 72
  • :) You are right. I made up some test list, I didn't really mean to say test's. Just some data with apostrophe is all I wanted. – GaneshT Aug 04 '11 at 00:15
3

It isn't to everyone's taste, but I like to create helper extensions for these kinds of tasks, and put them into a "utility" namespace:

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));
davecoulter
  • 1,786
  • 10
  • 15
  • this one is cool, I prefer the above one is because I need it in just one place to use it. However I just learned how to create extensions. Thanks. – GaneshT Aug 04 '11 at 00:11
  • @gangt No problem! The first time I learned extensions I thought it was pretty awesome too. – davecoulter Aug 04 '11 at 00:12
1

You can always encode quotes before you build your string.

ika
  • 1,801
  • 2
  • 12
  • 9
0

string s = string.Join(',', itemsList.Select(i => $"'{i}'"));

Using string interpolation. String.Replace is not required here.

-1

I like a version without Replace:

using System.Linq;
(...)
string s = String.Join(", ", from l in MyList select String.Format("'{0}'", l));
Starli0n
  • 103
  • 2
  • 10