当我向Datatable添加行,然后迭代该Datatable时。 我会以相同的顺序获取行,然后插入它们吗?先进先出? 或者我可以不依赖该命令吗?
row = datatable.NewRow();
row("id") = 1;
table.Rows.Add(row);
row = datatable.NewRow();
row("id") = 2;
table.Rows.Add(row);
foreach(Row row in datatable.AsEnumerable())
{
// FIFO here? always get row with id 1 as first row and row with id 2 as second row?
}
答案 0 :(得分:1)
答案 1 :(得分:1)
是的,通常情况就是这样。
如果您需要对行进行显式排序,我建议您在迭代它们之前对它们进行排序。通过执行OrderBy<>
linq类型查询或使用DataTable
上的Select
方法。
此外,您可以使用DataTable的Rows
属性来获取所有行的可枚举,而不是进行AsEnumerable
调用。
编辑: 通过检查DataTable的反编译源,我发现DataTable的Rows属性返回一个DataRowCollection对象。 DataRowCollection将行存储在基于二叉树的结构中,允许您根据其数组索引获取项目。因此它将按照添加的顺序返回行。只要我们公开一个采用数字索引的索引器就暗示了这一点。
此外,AsEnumerable
扩展方法会将行转换为包含与EnumerableRowsCollection
相同类型的IEnumerable<DataRow>
。