在处理master / detail和LINQ时,我唯一能找到的就是通过数据绑定。但是,我使用LINQ来查询我的数据,并且需要手动循环遍历结果而无需数据绑定。我的最终目的是遍历主结果集,获取子组的分组列表,并将主/详细数据输出为XML中的hierchial结构。
我的插图:我有一个名为my_master_tbl的表格,它将按日期查询。我有一个名为my_child_tbl的子表,它将按日期按主ID分组,并使用sum()来累计某些字段。我想将分组数据链接到主服务器,并以最有效的方式遍历主服务器/详细信息,以将结果导出为xml。那是什么意思?我能想到的唯一方法是遍历master,然后根据master_id查询子组的分组结果集。
答案 0 :(得分:1)
我建议将此作为返回结果集的存储过程,或者作为获取所有主数据的查询以及获取所有子数据的另一个查询。这样你就可以拿到它。然后,当您遍历主数据时,您已经掌握了所有子数据。然后,您可以通过当前主ID对所有子数据进行服务器端过滤...并遍历所有子数据。
如果您需要这样做,这个概念也适用于分页,因为您只获得了在给定迭代中需要使用的主数据和子数据量。
答案 1 :(得分: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>
我确定您需要根据您计划使用的布局对此进行一些更改,但希望它能为您提供一些想法。
这也假设您在主表和子表之间建立了关系。如果不是,则需要进行一些其他更改。