.net 数据表行插入顺序



当我向数据表添加行,然后迭代该数据表时。 我会按照插入行的相同顺序获取行吗?先进先出? 或者我可以不依赖那个订单吗?

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

最新更新