当我向数据表添加行,然后迭代该数据表时。 我会按照插入行的相同顺序获取行吗?先进先出? 或者我可以不依赖那个订单吗?
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?
}
如果您手动执行此操作,当然是的。
MSDN - 向数据表添加数据
请注意,数组中的值按顺序与列匹配, 基于它们在表中的显示顺序。
是的,通常应该发生这种情况。 如果您需要对行进行显式排序,我建议您在迭代它们之前对它们进行排序。通过执行OrderBy<>
linq 类型查询或在DataTable
上使用Select
方法。
此外,还可以使用 DataTable 的Rows
属性获取所有行的枚举项,而不是执行AsEnumerable
调用。
编辑: 通过检查 DataTable 的反编译源代码,我发现 DataTable 的 Rows 属性返回一个 DataRowCollection 对象。DataRowCollection 将行存储在基于二叉树的结构中,该结构允许您根据其数组索引获取项目。因此,它将按照与添加行相同的顺序返回行。只要我们公开一个采用数字索引的索引器,这就是隐含的。
此外,AsEnumerable
扩展方法会将行转换为包装与IEnumerable<DataRow>
相同的类型的EnumerableRowsCollection
。