C# ADO.NET:将DataTable转换为DataRows数组

C# ADO.NET:将DataTable转换为DataRows数组,c#,ado.net,C#,Ado.net,我正在使用ADO.NET和C#,我想将DataTable对象转换为DataRows数组。做这件事的优雅方式是什么?我的第一个问题是为什么?这个要求毫无意义 答案是: DataRow[] rows = myDataTable.Select(); 实际上,DataTable有一个名为Rows的属性,witch提供了执行此操作的方法 您可以通过以下方式完成此操作: List<System.Data.DataRow> r = d.Rows.AsQueryable().OfType<S

我正在使用ADO.NET和C#,我想将DataTable对象转换为DataRows数组。做这件事的优雅方式是什么?

我的第一个问题是为什么?这个要求毫无意义

答案是:

DataRow[] rows = myDataTable.Select();

实际上,DataTable有一个名为Rows的属性,witch提供了执行此操作的方法

您可以通过以下方式完成此操作:

List<System.Data.DataRow> r = d.Rows.AsQueryable().OfType<System.Data.DataRow>().ToList();
List r=d.Rows.AsQueryable().OfType().ToList();
DataTable.Select()提供了一个数据行数组。您可以将其用作数组

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函数。这可能也适用。

如果您希望将内容视为字符串,请使用以下代码:

string.Join(",", dataTable.AsEnumerable().SelectMany(row => row.ItemArray))

投了赞成票,因为我在寻找“林克”的方式。。。谢谢这似乎不会复制RowState==DataRowState的任何行。Deleted@Alex:这是因为具有
Deleted
状态的行不再被视为表的一部分。如果要验证,请将
.Select()
table.Rows.Count
进行比较。你会发现它们是一样的。这很奇怪,但是当你在async/await中使用dt.Select()时,它有时会改变行的顺序。不知道为什么,我使用dt.AsEnumerable().ToArray(),它工作得很好