Для обработки запросов поддержки я пытаюсь создать небольшой интерфейс, который выбирает строку строки с разделителем строки строки из многострочного текстового поля ASP и дает результат с одинарными кавычками и запятой, скорректированными с текстом. Пример
A1234
A1235
A1236
Стало бы тем, что может войти в "SQL In Clause",
'A1234',
'A1235',
'A1236'
Как я могу улучшить приведенный ниже код для достижения того же?
string[] arr = txtBox.Text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Я знаю формулу excel (= "'" & A1 & "',") для того же самого, но excel недоступен на нескольких машинах.
Если бы это был я, я бы:
var value = "IN ('" + String.Join("','", txtBox.Lines) + "')";
Или только для значений:
var value = "'" + String.Join("','", txtBox.Lines) + "'";
Он в основном соединяет каждую строку текстового поля (т.е. Каждое значение в каждой строке) с помощью ','
Это хорошо, но вы должны убедиться, что есть '
в начале и конце".
Дальнейшее чтение свойства Lines
:
http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.lines(v=vs.110).aspx
string[] lines = txt.Split(new Char[] { '\n', '\r' },
StringSplitOptions.RemoveEmptyEntries);
var value = "'" + String.Join("','", lines) + "'";
Проверьте этот ответ... Конкатентные строки в списке <string> с помощью LINQ
... есть функция Agregate()! никогда не знал этого... так что вы можете сказать
var txtBoxText = @"A1234
A1235
A1236";
var result = txtBoxText.Split(
Environment.NewLine.ToCharArray(),
StringSplitOptions.RemoveEmptyEntries)
.Select(x=>"'" + x + "'")
.Aggregate((i,j)=> i + "," + j);
Assert.AreEqual(result, @"'A1234','A1235','A1236'");