Лучшая практика при преобразовании значений DataColumn в массив строк?
Лучшая практика при преобразовании значений DataColumn в массив строк?
[Редактировать] Все значения для определенного DataColumn для всех строк DataTable, которые будут преобразованы в массив строк?
3 ответа
Если я понял вашу цель, вы хотите указать конкретный столбец и вернуть все его значения в виде строкового массива.
Попробуйте эти подходы:
int columnIndex = 2; // desired column index
// for loop approach
string[] results = new string[dt.Rows.Count];
for (int index = 0; index < dt.Rows.Count; index++)
{
results[index] = dt.Rows[index][columnIndex].ToString();
}
// LINQ
var result = dt.Rows.Cast<DataRow>()
.Select(row => row[columnIndex].ToString())
.ToArray();
Вы могли бы заменить columnIndex
с columnName
вместо этого, например:
string columnName = "OrderId";"
РЕДАКТИРОВАТЬ: вы просили конкретный массив строк, но в случае гибкости в отношении требований, я бы предпочел List<string>
чтобы избежать необходимости определять длину массива перед циклом for в первом примере и просто добавлять в него элементы. Это также хорошая возможность использовать цикл foreach.
Я бы тогда переписал код следующим образом:
List<string> list = new List<string>();
foreach (DataRow row in dt.Rows)
{
list.Add(row[columnIndex].ToString());
}
Свойство DataRow.ItemArray -
http://msdn.microsoft.com/en-us/library/system.data.datarow.itemarray.aspx
Кроме того, какую версию вы используете? Вы должны проверить класс DataTableExtensions -
http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.aspx
И класс DataRowExtensions -
http://msdn.microsoft.com/en-us/library/system.data.datarowextensions.aspx
Я знаю, что этот вопрос старый, но я нашел его в своем поиске в Google, пытаясь сделать что-то подобное. Я хотел создать список из всех значений, содержащихся в определенной строке моей таблицы данных. В приведенном ниже примере кода я добавил источник данных SQL в свой проект в Visual Studio с помощью мастеров графического интерфейса и уронил нужный адаптер таблицы в конструктор.
'Create a private DataTable
Private authTable As New qmgmtDataSet.AuthoritiesDataTable
'Fill the private table using the table adapter
Me.AuthoritiesTableAdapter1.Fill(Me.authTable)
'Make the list of values
Dim authNames As List(Of String) = New List(Of String)(From value As qmgmtDataSet.AuthoritiesRow In Me.authTable.Rows Select names.authName)