如何在C#中将datatable的第一列保存到数组中

30

我有这样一种数据表:

Name | CategorieID | FullCategorie_ID
----  -------------  ----------------
 A        1             12  
 B        1             13
 C        5             14
 D        3             15
 E        6             16

我想要将Name列的值保存到一个数组中,我正在使用以下代码获取一行的值。例如,要获取第一行的值,我可以使用以下代码。

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

但是我不知道如何获取仅第一列的所有值。

3个回答

75

我建议使用LINQ to DataSet来查询DataTable:

datatable1.AsEnumerable().Select(r => r.Field<string>("Name")).ToArray();

4
@Kami 欢迎!顺便说一下,你的问题在于 Rows[0],它会给你表格的第一行。相反,你应该从每一行中选择数据 Rows.Cast<DataRow>().Select(r => r.ItemsArray[0].ToString()) - Sergey Berezovskiy
1
请确保您添加对 System.Data.DataSetExtensions 的引用。AsEnumerable 的参考文献:https://learn.microsoft.com/en-us/dotnet/api/system.data.datatableextensions.asenumerable?view=netframework-4.7.2 - Setyo N

7

经典模式

List<String> stringArr = new List<String>();

// Classic version :-)
for( int a = 0 ; a < datatable1.Rows.Count ; a ++)
{
    stringArr.Add(datatable1.Rows[a]["Name"].ToString());
}

谢谢你的回答,但我发现使用 LINQ to DataSet 更合适。 - Kamran
感谢您发布这个“经典”方法。在某些编译器版本、库和扩展方法不可用的情况下非常有用。 - webworm
我很感激。我正在尝试在一个没有ienumerable的表格上找到特定的列。 - John Lord

1
List<string> _data = new List<string>();

foreach (DataRow row in datatable1.Rows)
{
  _data.Add((string)Convert.ToString(row["Name"]));
}

Array test = _data.ToArray();

请仔细阅读问题中的示例代码。此外,它并没有解释如何仅获取第一列。 - Sergey Berezovskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接