如何将DataTable列转换为List

shr*_*ain 60 .net c# datatable list

我有一个包含多列的DataTable.我想List<String>从DataTable的第一列中获取一个.我怎样才能做到这一点?

Mic*_*uen 77

试试这个:

static void Main(string[] args)
{
    var dt = new DataTable
    {
        Columns = { { "Lastname",typeof(string) }, { "Firstname",typeof(string) } }
    };
    dt.Rows.Add("Lennon", "John");
    dt.Rows.Add("McCartney", "Paul");
    dt.Rows.Add("Harrison", "George");
    dt.Rows.Add("Starr", "Ringo");

    List<string> s = dt.AsEnumerable().Select(x => x[0].ToString()).ToList();

    foreach(string e in s)
        Console.WriteLine(e);

    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

  • @JerryGoyal 回复晚了,但对于其他想知道的人来说,只需将 `x[0]` 替换为 `x["Lastname"]` 即可。Lastname 是我们感兴趣的列的名称。 (4认同)

dev*_*tal 46

var list = dataTable.Rows.OfType<DataRow>()
    .Select(dr => dr.Field<string>(columnName)).ToList();
Run Code Online (Sandbox Code Playgroud)

[ 编辑:System.Data.DataSetExtensions如果不能编译,请添加对项目的引用]

  • AsEnumerable()也适用于DataTable.var list = dataTable.AsEnumerable().选择(r => r.Field <string>(columnName)).ToList(); (9认同)
  • 如果您不知道“columnName”怎么办? (2认同)

Man*_*kar 7

干得好.

           DataTable defaultDataTable = defaultDataSet.Tables[0];
           var list = (from x in defaultDataTable.AsEnumerable()
                    where x.Field<string>("column1") == something
                    select x.Field<string>("column2")).ToList();
Run Code Online (Sandbox Code Playgroud)

如果您需要第一列

           var list = (from x in defaultDataTable.AsEnumerable()
                    where x.Field<string>(1) == something
                    select x.Field<string>(1)).ToList();
Run Code Online (Sandbox Code Playgroud)


mar*_*tco 6

这是你需要的吗?

DataTable myDataTable = new DataTable();
List<int> myList = new List<int>();
foreach (DataRow row in myDataTable.Rows)
{
    myList.Add((int)row[0]);
}
Run Code Online (Sandbox Code Playgroud)


nzr*_*tmn 5

我就像下面一样,在您将列设置为 AsEnumarable 后,您可以排序、排序或按您想要的方式排序。

 _dataTable.AsEnumerable().Select(p => p.Field<string>("ColumnName")).ToList();
Run Code Online (Sandbox Code Playgroud)