在聚合C#数据集时,如何将DataSet转换为.Load()的DataTable数组?

时间:2013-05-09 14:21:44

标签: c# linq datatable dataset

我正在使用.NET 4.0。我正在尝试将具有相同模式的许多数据集聚合到一个数据集中。每个源数据集应包含与所有其他数据集相同的三个表名。现在,我可以假设数据将是唯一的,甚至跨表和数据集。我正在尝试使用.Load()函数,但我被困在第三个参数上。我可能误解了.Load()实际上是为了什么,如果这不是完成这项任务的最佳方法,那么请务必告诉我。这是我到目前为止所做的:

private AccessFileCollection accessFileCollection;
private DataSet allAccessData;

public void AggregateCollection()
{
    foreach (AccessFile accessFile in accessFileCollection.Files.Values)
    {
        foreach (DataTable dt in accessFile.Dataset.Tables)
        {
            if (allAccessData.Tables[dt.TableName] == null)
            { allAccessData.Tables.Add(new DataTable(dt.TableName)); }
        }
        allAccessData.Load(accessFile.Dataset.CreateDataReader(), 
            LoadOption.PreserveChanges,
            accessFile.Dataset.Tables);
    }
}

//AccessFileCollection is a custom class which implements .GetEnumerator() and also contains:
private Dictionary<int, AccessFile> accessFileCollection; //With a get/set called ".Files"

//AccessFile is a custom class that contains:
private DataSet ds; //With a get/set called ".Dataset"

MSDN为我们提供了.Load()的方法签名:

public void Load(
    IDataReader reader,
    LoadOption loadOption,
    params DataTable[] tables // <-- How do I satisfy this? What do I provide out of accessFile?
)

所以,我的问题又是: - .Load()在这里合适吗? - 满足DataTable []要求的最佳方法是什么? - 为什么微软不让我把整个数据集扔进第三个参数?数据集已包含数据表数组列表!

1 个答案:

答案 0 :(得分:0)

  • 满足DataTable []要求的最佳方法是什么?

DataSet已包含DataTables。您可以从bellow(具有DataSet accessFile)

尝试tablesArray
DataTableCollection tableCollection = accessFile.Tables;
DataTable[] tablesArray = null;
tableCollection.CopyTo(tablesArray, 0);