2013-05-14 58 views
0

我有一个类别/子记录的DataTable在下面的格式:合并重复的数据表中记录为XML文档

hierarchy id1 cat1 id2 cat2   id3 cat3 
     4 3105 Mens 3195 Shorts  3130 Shorts 
     4 3105 Mens 3195 Shorts  3196 Swim Shorts 
     4 3105 Mens 3177 Knitwear 3118 Jumpers 
     4 3105 Mens 3177 Knitwear 3178 Cardigans 
     4 3105 Mens 3177 Knitwear 3814 V-Neck Knitwear 

我试图将其转换为XML在这样的格式:

<CATEGORY NAME="mens"> 
     <CATEGORIES NAME="Shorts" /> 
      <CATEGORIES NAME="Shorts" /> 
      <CATEGORIES NAME="SwimShorts" /> 
     <CATEGORIES NAME="Knitwear" /> 
      <CATEGORIES NAME="Jumpers" /> 
      <CATEGORIES NAME="Cardigans" /> 
      <CATEGORIES NAME="V-Neck Knitwear" /> 

但我能得到最好的是这样的:

<CATEGORY NAME="Mens"> 
     <CATEGORIES NAME="Knits" /> 
     <CATEGORIES NAME="Crew Neck Knitwear" /> 
</CATEGORY> 
<CATEGORY NAME="Mens"> 
     <CATEGORIES NAME="Knits" /> 
     <CATEGORIES NAME="Cardigans" /> 

正如你可以看到有哪些,我不想重复。我知道我需要以某种方式合并或去重复。

我返回数据为AsEnumerable(),然后做一个foreach和创造顶级类别和子XElements的子类别的的XElement:

var e = new XElement("CATEGORY", new XAttribute("ID", item["did1"]), new XAttribute("NAME", item["name1"]), 
         item["did2"].ToString() != "" ? new XElement("CATEGORIES", new XAttribute("ID", item["did2"]), new XAttribute("NAME", item["name2"])) : null, 
         item["did3"].ToString() != "" ? new XElement("CATEGORIES", new XAttribute("ID", item["did3"]), new XAttribute("NAME", item["name3"])) : null, 
         item["did4"].ToString() != "" ? new XElement("CATEGORIES", new XAttribute("ID", item["did4"]), new XAttribute("NAME", item["name4"])) : null 
        ); 

我不挑剔什么技术我曾经产生结果。

回答

0

如何像这样

var X = from item in Data 
     group item by item.cat1 into g 
     select new XElement(
      "CATEGORY", 
      new XAttribute("NAME", g.Key), 
      from it in g 
      group it by it.cat2 into k 
      select new XElement("CATEGORIES2", new XAttribute("NAME", k.Key), 
       from i in k.Select(x=>x.cat3).Distinct() 
       select new XElement("CATEGORIES3", new XAttribute("NAME",i)) 
       ) 
     );