数据表中的文件名-第一列

本文关键字:一列 文件名 数据表 | 更新日期: 2023-09-27 18:21:32

有没有一种方法可以在不使用foreach循环的情况下获得DataTable中的FileNames列表?

DataTable dtOutput = new DataTable();
dtOutput.Columns.Add("FileName", typeof(string));
dtOutput.Columns.Add(Col2..., typeof(decimal));
...
foreach (string file in Directory.EnumerateFiles(txtBoxReadFrom.Text, txtBoxTargetFilter.Text))
{
   dtOutput.Rows.Add(Path.GetFileName(file));                
}
progressBar1.Maximum = dtOutput.Rows.Count;

数据表中的文件名-第一列

Linq对您隐藏循环,它无论如何都会使用它们:

List<String> allFileNames = dtOutput.AsEnumerable()
     .Select(r => r.Field<string>("FileName"))
     .ToList();

但是,既然已经有了表,而且它也是内存中的集合,为什么还要列表呢?

如果您想在另一个多行TextBox中显示这些文件名,可以使用:

txtBoxWriteTo.Lines = dtOutput.AsEnumerable()
     .Select(r => r.Field<string>("FileName"))
     .ToArray();
  1. 将DataTable对象转换为Enumerable()
  2. 应用以列名作为字段名的select子句
  3. 将其强制转换为字符串数组。

     string[] strSummCities = dtTemp1.AsEnumerable().Select(s => s.Field<string>("City")).ToArray<string>();
    

希望这将帮助t解决您的疑问。

您应该添加对System.Data.DataSetExtension的引用,以便为可枚举值提供CopyToDataTable(),之后您可以使用:

DataTable dtOutput =  
       Directory.EnumerateFiles(txtBoxReadFrom.Text, txtBoxTargetFilter.Text).Select(r =>
                                                      {
                                                       DataRow row = dtOutput.NewRow();
                                                       row["fileName"] = r;
                                                       return row;
                                                      }).CopyToDataTable();