【问题标题】:Query a DataSet查询数据集
【发布时间】:2010-12-24 13:13:40
【问题描述】:

我正在将 XML 文件中的数据读入强类型 DataSet。数据最终出现在多个表中;我可以对其运行查询以创建非规范化视图以显示在DataGrid 中吗?

示例输入:

<PeopleFile>
    <address>
        <street>123 Some Street</street>
        <town>Anytown</town>
        <resident>
            <first>Jane</first>
            <last>Doe</last>
        </resident>
        <resident>
            <first>John</first>
            <last>Doe</last>
        </resident>
    </address>
    <address>
        <street>456 Tree Street</street>
        <town>Westwood</town>
        <resident>
            <first>Mary</first>
            <last>Jones-Smith</last>
        </resident>
        <resident>
            <first>Mike</first>
            <last>Smith</last>
        </resident>
        <resident>
            <first>Kate</first>
            <last>Smith</last>
        </resident>
    </address>
</PeopleFile>

期望的输出:

123 Some Street Anytown     Jane    Doe  
123 Some Street Anytown     John    Doe  
456 Tree Street Westwood    Mary    Jones-Smith  
456 Tree Street Westwood    Mike    Smith  
456 Tree Street Westwood    Kate    Smith  

编辑:我应该补充一点,除了每个文件有多个表之外,我的真实数据还被拆分到多个文件中,AFAIK 需要将这些文件加载​​到单独的 DataSets 中。

【问题讨论】:

    标签: c# xsd datatable dataset


    【解决方案1】:

    是的,使用 Linq。有一组特殊的扩展称为 Linq-to-Datasets。

    您显然需要 .NET 3.5,并添加 using System.Data;

    如果您的多个文件遵循相同的架构,您应该能够将它们读入 TypedDataSet 的单独实例和Merge() 这些实例。

    【讨论】:

    • 文件遵循几种不同的模式,因此至少 Merge()ing 不起作用。
    • Table 级别还有一个 Merge()。但是您需要详细说明数据集,例如表是否有 ID 等。
    • 是的。我的应用程序最初是使用 XmlSerialization 编写的,所有不同的对象都具有需要在代码中维护其唯一性的键值。摆脱这一点是我试图改用读取数据集的重要部分。 DataSet 表示将一些对象分解为多个表(例如,A 包含 B 的数组);在这些情况下,密钥是手动创建的。
    • 单个文件将包含最初是单个类型的对象的单个数组 + 其他文件头数据。
    • 我可以将数据集放入图形查询设计器中吗?我以前从未使用过 linq,一直在努力手动编写非平凡的 sql。
    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多