1

N ノードの深さになる可能性のある 2 つの列 (親、カテゴリ) を持つデータテーブルから C# を使用して階層を作成しようとしています。

例えば

Category Table
=========================
Parent     | Category
=========================
(blank)         root
root            whats-new
whats-new       hair
whats-new       skincare
skincare        face-product

これから私は次のものを作成しようとしています:

root
root.whats-new
root.whats-new.hair
root.whats-new.skincare
root.whats-new.skincare.face-product

多くの例を見てきましたが、ほとんどが SQL の例を示していますが、どのようにアプローチすればよいかわかりません。

リストをループして最大 3 つの深さまで構築できましたが、カテゴリは N ノードの深さにすることができます。どんな助けや指示も大歓迎です。

4

2 に答える 2

1

私は最近、このようなことを少ししました。それが役立つかどうかはわかりませんが、ここでコードを見ることができます: https://github.com/Imdsm/PersonalWebsite/blob/master/PersonalWebsite/Views/Blog/PostArchive.cshtml

ブログのアーカイブ用だったので、年月投稿です。

おそらく最も簡単な方法は、親なしでカテゴリごとにすべてを選択するなど、親ごとにリストを調べて(ノード1です)、その現在のノードを親として持つすべてのカテゴリを取得することです。 、これで 2 番目のレベルができました。それを調べて、これらの 2 番目のノードのそれぞれを親である 3 番目のレベルとして持つすべてのノードを選択します。

コードに関しては、あなたがそれをどのように実装しているのかわからないので、私は本当に助けられません.

例:

get all cats without parent
get all cats where previous cat is their parent
loop through each of these cats, get all cats where cat(n) is the parent
于 2013-03-05T09:14:28.953 に答える
0

データをデータテーブルにロードする代わりに、XML 形式でデータを解析することになりました。必要な階層を生成する機能を提供しながら、多くのオーバーヘッドを取り除くのに役立ちましたが、コードは大幅に削減されました。ご協力いただきありがとうございます。

using System.Xml;

// --------------

var doc = new XmlDocument();

doc.Load(@"C:\source.xml");

XmlNodeList nodeList;
XmlNode root = doc.DocumentElement;

nodeList=root.SelectNodes("category");

Dictionary<string, string> fullName = new Dictionary<string, string>();
foreach(XmlNode node in nodeList)
{
  string nodeid = node.Attributes["category-id"].Value;
  string parent = node.Attributes["parent"].Value;
  string parentFullname = fullName[parent];
  string nodeFullname = (parentFullname != null) ? parentFullname + "." + nodeid : nodeid;
  fullName[nodeid] = nodeFullname;
}
于 2013-03-06T04:18:18.770 に答える