0

有没有办法在不使用循环的情况下获取FileNamesin a的列表?DataTableforeach

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;
4

3 回答 3

0
  1. 将 DataTable 对象转换为 Enumerable()。
  2. 应用以列名作为字段名的 select 子句。
  3. 将其转换为字符串数组。

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

希望这将有助于解决您的查询。

于 2013-07-08T10:18:44.537 回答
0

你应该添加一个引用以System.Data.DataSetExtension获得CopyToDataTable()可枚举的值,之后你可以使用:

DataTable dtOutput =  
       Directory.EnumerateFiles(txtBoxReadFrom.Text, txtBoxTargetFilter.Text).Select(r =>
                                                      {
                                                       DataRow row = dtOutput.NewRow();
                                                       row["fileName"] = r;
                                                       return row;
                                                      }).CopyToDataTable();
于 2013-07-08T10:21:32.503 回答
0

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();
于 2013-07-08T10:22:36.103 回答