如何将DataTable中的值转换为c#中的字符串数组

我有一个包含单行的DataTable。 我想将此DataTable值转换为字符串数组,以便我可以通过字符串数组索引访问该DataTable的列值例如,如果我的DataTable如下所示

| Name | Address | Age | ------------------------------- | jim | USA | 23 | 

我想将Datatable中的值存储到我的字符串数组中,以便MyStringArray [1]为我提供值USA。

提前致谢

很容易:

 var stringArr = dataTable.Rows[0].ItemArray.Select(x => x.ToString()).ToArray(); 

其中DataRow.ItemArray属性是一个对象数组,其中包含数据表的每列的行值。

也许是这样的,假设数据表中有许多这些行,并且每行都是row

 List MyStringArrays = new List(); foreach( var row in datatable.rows )//or similar { MyStringArrays.Add( new string[]{row.Name,row.Address,row.Age.ToString()} ); } 

然后你可以访问一个:

 MyStringArrays.ElementAt(0)[1] 

如果你使用linqpad ,这是你的例子的一个非常简单的场景:

 class Datatable { public List rows { get; set; } public Datatable(){ rows = new List(); } } class data { public string Name { get; set; } public string Address { get; set; } public int Age { get; set; } } void Main() { var datatable = new Datatable(); var r = new data(); r.Name = "Jim"; r.Address = "USA"; r.Age = 23; datatable.rows.Add(r); List MyStringArrays = new List(); foreach( var row in datatable.rows )//or similar { MyStringArrays.Add( new string[]{row.Name,row.Address,row.Age.ToString()} ); } var s = MyStringArrays.ElementAt(0)[1]; Console.Write(s);//"USA" } 

如果这就是您想要做的所有事情,则无需将其转换为数组。 你可以访问它:

 string myData=yourDataTable.Rows[0][1].ToString();//Gives you USA 

 string[] result = new string[table.Columns.Count]; DataRow dr = table.Rows[0]; for (int i = 0; i < dr.ItemArray.Length; i++) { result[i] = dr[i].ToString(); } foreach (string str in result) Console.WriteLine(str); 

  private string[] GetPrimaryKeysofTable(string TableName) { string stsqlCommand = "SELECT column_name FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE " + "WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1" + "AND table_name = '" +TableName+ "'"; SqlCommand command = new SqlCommand(stsqlCommand, Connection); SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = command; DataTable table = new DataTable(); table.Locale = System.Globalization.CultureInfo.InvariantCulture; adapter.Fill(table); string[] result = new string[table.Rows.Count]; int i = 0; foreach (DataRow dr in table.Rows) { result[i++] = dr[0].ToString(); } return result; }