使用linq嵌套集合将sql转换为xml

使用linq嵌套集合将sql转换为xml,linq,linq-to-xml,Linq,Linq To Xml,我有一个类似这样的数据表 name, hour, price1, price2, price3, price4, price5 fred, 3, 12.5, 13.5, 14, 15, 16 dave, 6, 8, 12, 18, 20.2, 25 fred, 6, 10, 11, 14, 15, 19.7 <timeCost> <person name="fred"> <time hour="5"> <cost price="

我有一个类似这样的数据表

name, hour, price1, price2, price3, price4, price5
fred, 3, 12.5, 13.5, 14, 15, 16
dave, 6, 8, 12, 18, 20.2, 25
fred, 6, 10, 11, 14, 15, 19.7
<timeCost>
  <person name="fred">
    <time hour="5">
      <cost price="12.5" />
      <cost price="13.5" />
      <cost price="14" />
      <cost price="15" />
      <cost price="16" />
    </time>
    <time hour="6">
      <cost price="10" />
      <cost price="11" />
      <cost price="14" />
      <cost price="15" />
      <cost price="19.7" />
    </time>
  </person>
  <person name="dave">
    <time hour="6">
      <cost price="8" />
      <cost price="12" />
      <cost price="18" />
      <cost price="20.2" />
      <cost price="25" />
    </time>
  </person>
</timeCost>
 // initialize data context
 var people = from p in dc.people orderby p.name, p.hour select p;
此表需要输出为如下所示的xml文件

name, hour, price1, price2, price3, price4, price5
fred, 3, 12.5, 13.5, 14, 15, 16
dave, 6, 8, 12, 18, 20.2, 25
fred, 6, 10, 11, 14, 15, 19.7
<timeCost>
  <person name="fred">
    <time hour="5">
      <cost price="12.5" />
      <cost price="13.5" />
      <cost price="14" />
      <cost price="15" />
      <cost price="16" />
    </time>
    <time hour="6">
      <cost price="10" />
      <cost price="11" />
      <cost price="14" />
      <cost price="15" />
      <cost price="19.7" />
    </time>
  </person>
  <person name="dave">
    <time hour="6">
      <cost price="8" />
      <cost price="12" />
      <cost price="18" />
      <cost price="20.2" />
      <cost price="25" />
    </time>
  </person>
</timeCost>
 // initialize data context
 var people = from p in dc.people orderby p.name, p.hour select p;
但是,我在使用linq(csharp)编写xml时遇到了问题。具体来说,问题是我不知道如何处理在每个名称节点(嵌套循环/集合)下有多个时间节点的问题。如何做到这一点


这是一个sql 08 ent db,如果它对任何人都很重要的话。

您应该在这个人的名字上创建一个分组,也可能在列表中选择价格。下面的模型应该可以用

class Person
{
    public string Name { get; set; }
    public int Hour { get; set; }
    public decimal Price1 { get; set; }
    public decimal Price2 { get; set; }
    public decimal Price3 { get; set; }
    public decimal Price4 { get; set; }
    public decimal Price5 { get; set; }
}

List people=新列表()
{
new Person(){Name=“Fred”,小时=3,价格1=1250万,价格2=1350万,价格3=14,价格4=15,价格5=16},
new Person(){Name=“Fred”,小时=6,价格1=10,价格2=11,价格3=14,价格4=15,价格5=1970万},
new Person(){Name=“Dave”,小时=6,价格1=8,价格2=12,价格3=18,价格4=20.2m,价格5=25}
};
var query=来自人中的p
按p.名称将p分组为pg
选择新的
{
名称=第页键,
记录=来自pg中的记录
选择新的
{
小时=记录。小时,
价格=新列表(){record.Price1,record.Price2,record.Price3,record.Price4,record.Price5}
}
};
XDocument document=新XDocument(新XElement(“时间成本”),
来自被查询人
选择new XElement(“person”,new XAttribute(“name”,person.name),
亲自记录,记录
选择new XElement(“时间”,new XAttribute(“小时”,record.hour),
从记录中的价格。价格
选择新的XElement(“成本”,新的XAttribute(“价格”,价格‘‘‘‘‘‘)’);
XDocument现在看起来像这样

<timeCost>
  <person name="Fred">
    <time hour="3">
      <cost price="12.5" />
      <cost price="13.5" />
      <cost price="14" />
      <cost price="15" />
      <cost price="16" />
    </time>
    <time hour="6">
      <cost price="10" />
      <cost price="11" />
      <cost price="14" />
      <cost price="15" />
      <cost price="19.7" />
    </time>
  </person>
  <person name="Dave">
    <time hour="6">
      <cost price="8" />
      <cost price="12" />
      <cost price="18" />
      <cost price="20.2" />
      <cost price="25" />
    </time>
  </person>
</timeCost>