ADO.NET:将DataTable转换为DataRow数组

12
我正在使用ADO.NET和C#,想将DataTable对象转换为DataRow数组。有没有一种优雅的方法可以做到这一点?
4个回答

22

我的第一个问题是为什么?这个请求没有意义。

答案是:

DataRow[] rows = myDataTable.Select();

这似乎没有复制任何行,其 RowState == DataRowState.Deleted。 - Alex
1
@Alex:这是因为带有“已删除”状态的行不再被视为表的一部分。如果您想要验证,请将.Select()table.Rows.Count进行比较,您会发现它们是相同的。 - Joel Etherton
有时候在async/await中使用dt.Select()会改变行的顺序,这很奇怪,我不知道为什么。所以我使用了dt.AsEnumerable().ToArray(),它完美地解决了问题。 - DNV

2
实际上,DataTable有一个名为“Rows”的属性,提供了用于执行此操作的方法。
您可以通过以下方式实现:
List<System.Data.DataRow> r = d.Rows.AsQueryable().OfType<System.Data.DataRow>().ToList();

投票赞成,因为我在寻找“LINQ”的方式...谢谢! - John Baughman

2

DataTable.Select()方法会返回一个DataRow数组。你可以把它当做一个数组来使用。

Dim dt As New DataTable
Dim dr() As DataRow = dt.Select() 

如果您需要一个ArrayList,可以使用以下代码:
public ArrayList ConvertDT(ref DataTable dt)
{
        ArrayList converted = new ArrayList(dt.Rows.Count);
        foreach (DataRow row in dt.Rows)
        {
                converted.Add(row);
        }
        return converted;
}

我没有使用过dt.rows.CopyTo函数。也许那个也可以用。


0
如果您想将内容作为字符串查看,请使用以下代码:
string.Join(",", dataTable.AsEnumerable().SelectMany(row => row.ItemArray))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接