FileNames в DataTable - первый столбец

Есть ли способ получить список FileNames в DataTable без использования foreach цикл?

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;

3 ответа

Решение

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

Надеюсь, что это поможет решить ваш запрос.

Вы должны добавить ссылку на System.Data.DataSetExtension для того, чтобы иметь CopyToDataTable() для перечисляемых значений, после этого вы можете использовать:

DataTable dtOutput =  
       Directory.EnumerateFiles(txtBoxReadFrom.Text, txtBoxTargetFilter.Text).Select(r =>
                                                      {
                                                       DataRow row = dtOutput.NewRow();
                                                       row["fileName"] = r;
                                                       return row;
                                                      }).CopyToDataTable();
Другие вопросы по тегам