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

聚合C#数据集时,如何将数据集转换为.Load()的DataTable数组?,c#,linq,datatable,dataset,C#,Linq,Datatable,Dataset,我正在使用.NET4.0。我试图将具有相同模式的多个数据集聚合到一个数据集中。每个源数据集应包含与所有其他数据集相同的三个表名。现在,我可以假设所有数据都是唯一的,即使是跨表和数据集。我正在尝试使用.Load()函数,但第三个参数我被卡住了。我可能误解了.Load()的实际用途,如果这不是完成此任务的最佳方式,请务必让我知道。以下是我目前掌握的情况: private AccessFileCollection accessFileCollection; private DataSet allAcc

我正在使用.NET4.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"
private AccessFileCollection AccessFileCollection;
私有数据集allAccessData;
public void AggregateCollection()
{
foreach(accessFileCollection.Files.Values中的AccessFile AccessFile)
{
foreach(accessFile.Dataset.Tables中的DataTable dt)
{
if(allAccessData.Tables[dt.TableName]==null)
{allAccessData.Tables.Add(新数据表(dt.TableName));}
}
allAccessData.Load(accessFile.Dataset.CreateDataReader(),
LoadOption.PreserveChanges,
accessFile.Dataset.Tables);
}
}
//AccessFileCollection是一个自定义类,它实现.GetEnumerator(),还包含:
私有字典访问文件集合//使用名为“.Files”的get/set
//AccessFile是一个自定义类,包含:
私有数据集ds//使用名为“.Dataset”的get/set
MSDN为我们提供了.Load()的方法签名:

公共空荷载(
IDataReader阅读器,
加载选项加载选项,
参数数据表[]表/
  • 满足DataTable[]要求的最佳方式是什么
数据集已包含DataTables。您可以尝试使用下面的tablesArray(使用数据集访问文件)


您是否尝试过提供数据集的
Tables
属性?类似于
dataSet.Tables.OfType().ToArray()
。似乎……一旦我通过了下一个错误,我就会知道更多:“Table myTable不属于此数据集。”我认为这可能是因为我没有正确初始化目标数据集,或者是因为.Tables.OfType().ToArray()没有正确初始化目标数据集可能创建的数组与我预期的不同。正在更新上面的代码。它可能正在尝试将未关联的
数据表添加到
数据集
。这些表将与源数据集相关联。在您看来,这是聚合数据集的错误方法,还是只是解决语法问题?我很抱歉我也愿意使用Linq,但我对它不太在行。我已经很久没有使用数据集了,但我可能会考虑使用
DataTable.Merge
ImportRow
方法对每个表进行操作。
public void Load(
    IDataReader reader,
    LoadOption loadOption,
    params DataTable[] tables // <-- How do I satisfy this? What do I provide out of accessFile?
)
DataTableCollection tableCollection = accessFile.Tables;
DataTable[] tablesArray = null;
tableCollection.CopyTo(tablesArray, 0);