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

Posted

技术标签:

【中文标题】聚合 C# 数据集时,如何将 DataSet 转换为 .Load() 的 DataTable 数组?【英文标题】:When aggregating C# datasets, how do I convert a DataSet into an DataTable Array for .Load()? 【发布时间】:2013-05-04 01:30:42 【问题描述】:

我正在使用 .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[] 要求的最佳方式是什么? - 为什么微软不让我将整个数据集放入第三个参数中?一个数据集已经包含一个数据表数组的列表!

【问题讨论】:

您是否尝试过提供数据集的Tables 属性?类似于dataSet.Tables.OfType&lt;DataTable&gt;().ToArray() 似乎...一旦我克服了下一个错误,我会知道更多:“表 myTable 不属于此数据集。”我认为这要么是因为我没有正确初始化我的目标数据集,要么是 .Tables.OfType().ToArray() 创建数组的方式可能与我预期的不同。更新上面的代码。 它可能正在尝试将未关联的DataTable 添加到DataSet。这些表将与源数据集相关联。 在您看来,这是聚合数据集的错误方法,还是只是制定语法的问题?我也愿意用 Linq,但我不擅长。 我已经很久没有处理数据集了,但我可能会考虑使用DataTable.MergeImportRow 方法对每个表进行处理。 【参考方案1】: 满足 DataTable[] 要求的最佳方法是什么?

DataSet 已包含 DataTables。你可以试试下面的tablesArray(有DataSet accessFile)

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

【讨论】:

以上是关于聚合 C# 数据集时,如何将 DataSet 转换为 .Load() 的 DataTable 数组?的主要内容,如果未能解决你的问题,请参考以下文章

C# CS结构中 2005 如何将二维数组转化成DataSet

如何防止 Azure ML Studio 在导入数据集时将特征列转换为 DateTime

如何在 C# 中将 Excel 文件的一部分转换为简化的 DataSet?

在 ASP.NET 中拉多个记录集时的 DataReader 或 DataSet

Numpy加载CSV - ValueError:无法将字符串转换为float

c#如何将查询后的结果放入list中