【问题标题】:How to convert a column of DataTable to a List如何将DataTable的列转换为List
【发布时间】:2011-09-30 20:40:08
【问题描述】:

我有一个包含多列的 DataTable。我想从 DataTable 的第一列中得到一个List<String>。我该怎么做?

【问题讨论】:

    标签: c# .net list datatable


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 还有其他人在列上收到只读错误吗?
    • 如何从“name”列中检索数据?
    • @JerryGoyal 迟到的回复,但对于其他想将x[0] 替换为x["Lastname"] 的人来说。姓氏是我们感兴趣的列的名称。
    【解决方案2】:
    var list = dataTable.Rows.OfType<DataRow>()
        .Select(dr => dr.Field<string>(columnName)).ToList();
    

    [编辑:如果无法编译,请将System.Data.DataSetExtensions 的引用添加到您的项目中]

    【讨论】:

    • AsEnumerable() 也适用于 DataTable。 var list = dataTable.AsEnumerable().Select(r => r.Field(columnName)).ToList();
    • 如果DataTable.AsEnumerable() 无法编译,请将 System.Data.DataSetExtensions 的引用添加到您的项目中。
    • 不知道columnName怎么办?
    • 我会选择 AsEnumerable() 方法而不是这个。这就像用左手握住右耳。
    【解决方案3】:

    给你。

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

    如果你需要第一列

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

    【讨论】:

      【解决方案4】:

      这是你需要的吗?

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

      【讨论】:

      • 你的答案几乎是正确的,除了,问题是询问姓名或List&lt;String&gt;
      【解决方案5】:

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

       _dataTable.AsEnumerable().Select(p => p.Field<string>("ColumnName")).ToList();
      

      【讨论】:

        【解决方案6】:

        我为您制作了一个示例,希望对您有所帮助...

            static void Main(string[] args)
            {
                var cols = new string[] { "col1", "col2", "col3", "col4", "col5" };
        
                DataTable table = new DataTable();
                foreach (var col in cols)
                    table.Columns.Add(col);
        
                table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
                table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
                table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
                table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
                table.Rows.Add(new object[] { "1", "2", "3", "4", "5" });
        
                foreach (var col in cols)
                {
                    var results = from p in table.AsEnumerable()
                                  select p[col];
        
                    Console.WriteLine("*************************");
                    foreach (var result in results)
                    {
                        Console.WriteLine(result);
                    }
                }
        
        
                Console.ReadLine();
            }
        

        【讨论】:

          【解决方案7】:

          1.非常简单的代码来迭代数据表并获取列表中的列。

          2.code ==>>>

           foreach (DataColumn dataColumn in dataTable.Columns)
           {
              var list = dataTable.Rows.OfType<DataRow>()
               .Select(dataRow => dataRow.Field<string> 
                 (dataColumn.ToString())).ToList();
           }
          

          【讨论】:

          • 可能要提一下,这个“简单”代码需要 .Net 4.5 或更高版本以及必须通过“Install-Package System.Data.DataSetExtensions -Version 4.5.0”安装的 nuget 包/跨度>
          猜你喜欢
          • 1970-01-01
          • 2011-01-17
          • 1970-01-01
          • 2013-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多