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();
- Преобразуйте объект DataTable в Enumerable().
- Примените предложение select с именем столбца в качестве имени поля.
Приведите его к строковому массиву.
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();