将DataColumn值转换为字符串数组时的最佳做法?

时间:2010-01-16 14:25:29

标签: c# arrays string datatable

将DataColumn值转换为字符串数组时的最佳做法是什么?

[编辑] 所有DataTable行的某些DataColumn的所有值都要转换为字符串数组?

3 个答案:

答案 0 :(得分:22)

如果我理解了你的目标,你想指定一个特定的列并将其所有值作为字符串数组返回。

尝试以下方法:

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());
}

答案 1 :(得分:2)

答案 2 :(得分:1)

我知道这个问题已经过时了,但我发现它在我的Google搜索中尝试做类似的事情。我想从我的数据表的特定行中包含的所有值创建一个列表。在下面的代码示例中,我使用GUI向导在Visual Studio中向我的项目添加了一个SQL数据源,并将所需的表适配器放入设计器中。

'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)