1

在处理 master/detail 和 LINQ 时,我唯一能找到的就是通过数据绑定。但是,我使用 LINQ 来查询我的数据,并且需要手动循环结果而不需要数据绑定。我的最终意图是遍历主结果集,获取分组的子列表,并将主/详细数据作为 XML 中的层次结构输出。

我的插图:我有一个名为 my_master_tbl 的表,它将按日期查询。我有一个名为 my_child_tbl 的子表,它将按日期、主 ID 分组,并使用 sum() 来汇总一些字段。我想将分组数据链接到主数据并以最有效的方式循环通过主数据/详细信息,以将结果导出为 xml。那是什么方法?我能想到的唯一方法就是遍历master,然后根据master_id查询children的分组结果集。

4

2 回答 2

1

我建议将其作为返回结果集的存储过程或作为获取所有主数据的查询和获取所有子数据的另一个查询来执行。这样你就可以拥有它了。然后,当您遍历主数据时,您已经拥有所有子数据。然后,您可以通过当前主 ID 对所有子数据进行服务器端过滤......并遍历所有子数据。

如果您需要这样做,这个概念也适用于分页,因为您只获得在给定迭代中需要使用的大量主数据和子数据。

于 2009-07-14T15:03:56.697 回答
0

我将使用 LinqToSql 和 LinqToXml 的组合来实现这一点,类似于以下内容:

var query = new XDocument(
    new XElement("Results", from i in context.my_master_tbl
                            where i.ItemDate > DateTime.Now.AddDays(-7)
                            select new XElement("MasterItem",
                                new XAttribute("MasterName", i.Name),
                                 from c in i.my_child_tbl
                                 group c by c.Date into g
                                 select new XElement("Child",
                                     new XAttribute("Date", g.Key),
                                     new XAttribute("SumField", g.Sum(d => d.FieldToSum))
                                 )
                            )));

这是将生成的一些结果 Xml:

<Results>
 <MasterItem MasterName="A">
  <Child Date="2009-01-15T00:00:00-06:00" SumField="491470" />
 </MasterItem>
 <MasterItem MasterName="B">
  <Child Date="2009-01-29T00:00:00-06:00" SumField="491526" />
 </MasterItem>
 <MasterItem MasterName="C">
  <Child Date="2009-01-15T00:00:00-06:00" SumField="1965960" />
  <Child Date="2009-07-14T00:00:00-05:00" SumField="-27" />
 </MasterItem>
 <MasterItem MasterName="D" />
 <MasterItem MasterName="E" />
</Results>

我确定您需要根据您计划使用的布局对此进行一些更改,但希望它会给您一些想法。

这也假设您的关系是在您的主表和子表之间设置的。如果不是,则需要进行一些其他更改。

于 2009-07-14T15:59:25.293 回答