Далее компактный string.join, чтобы он заменял апострофы? - PullRequest
0 голосов
/ 22 августа 2011

Рассмотрим приведенный ниже код (который динамически создает динамическую строку SQL)

Есть ли способ дополнительно сжать string.join, чтобы он автоматически заменял ("'", "' '") на всех членах массива? (без написания пользовательской версии)

C #:

[STAThread()]
public void Main()
{
    string[] astrAllGroups = {
        "Group A",
        "Group B",
        "D'Amato",
        null
    };

    for (int i = 0; i < astrAllGroups.Length; ++i) {
        if (!string.IsNullOrEmpty(astrAllGroups[i])) {
            astrAllGroups[i] = astrAllGroups[i].Replace("'", "''");
        }
    }

    string strDynSQL = "'" + string.Join("', '", astrAllGroups) + "'";
    strDynSQL = strDynSQL.Replace("'", "''");
    System.Windows.Forms.Clipboard.SetText(strDynSQL);
    Console.WriteLine(strDynSQL);


    Console.WriteLine(Environment.NewLine);
    Console.WriteLine(" --- Press any key to continue --- ");
    Console.ReadKey();
}

VB.NET

<STAThread()> _
Sub Main()
    Dim astrAllGroups As String() = {"Group A", "Group B", "D'Amato", Nothing}

    For i As Integer = 0 To astrAllGroups.Length - 1 Step 1
        If Not String.IsNullOrEmpty(astrAllGroups(i)) Then
            astrAllGroups(i) = astrAllGroups(i).Replace("'", "''")
        End If
    Next

    Dim strDynSQL As String = "'" + String.Join("', '", astrAllGroups) + "'"
    strDynSQL = strDynSQL.Replace("'", "''")
    System.Windows.Forms.Clipboard.SetText(strDynSQL)
    Console.WriteLine(strDynSQL)


    Console.WriteLine(Environment.NewLine)
    Console.WriteLine(" --- Press any key to continue --- ")
    Console.ReadKey()
End Sub

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Вы можете использовать LINQ:

string strDynSQL = "'" + string.Join("', '", 
                       astrAllGroups.Select(s => s.Replace("'", "''"))
                   ) + "'";

Если вы не используете .Net 4, вам нужно добавить .ToArray()

0 голосов
/ 22 августа 2011

Пока вы используете .NET 3 или новее, вы можете использовать LINQ:

var strDynSql = 
    "'"
    + String.Join("', '", 
                  astrAllGroups.Select(s => s.Replace("'","''")).ToArray())
    + "'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...