以下の形式のカテゴリ/サブカテゴリ レコードを含むデータテーブルがあります。
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 を実行し、最上位カテゴリの XElement とサブカテゴリの子 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
                    );
結果を出すためにどのような手法を使用したかについて、私はうるさいわけではありません。