有没有办法在不使用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;
答案 0 :(得分:0)
将其投射到字符串数组。
string[] strSummCities = dtTemp1.AsEnumerable().Select(s => s.Field<string>("City")).ToArray<string>();
希望这有助于解决您的疑问。
答案 1 :(得分: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();
答案 2 :(得分: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();