2017-06-07 16 views
0

私はkenticoアプリケーションを使用しています。そこには親のノードIDまたは親のparentnodeidが含まれています。私たちは親ノードと呼ばれるメンバーシップを持っていると子供1内ブログと呼ばれて見ることができますツリー内の親ノードIDに基づいてすべての子データを削除

Tree Image 1

この写真で: は、以下のスクリーンショットです。ブログの下にあるノードIDは、29子を持つ583です。今私はコードを実行して、その親の下にあるすべての子データをリストとして取得しています。 List of parent and child image

は、今私はそのparentnodeidまたは親の親ノードID 583(ブログ)でリストからすべての子データを削除する必要があります。 は、以下のスクリーンショットです。以下は

すべての親と子項目のリストを取得するために使用するコードです:私たちは、コードchildNodeIdの上に見ることができるように

TreeProvider tree = new TreeProvider(); 
 
    var childNodeDataSet = tree.SelectNodes(childNodeId, null, SiteContext.CurrentSiteName); 
 
    var getAllChildItems = childNodeDataSet.Items[0].AllChildren; 
 
    var getItems = getAllChildItems.ToList().OrderBy(a=>a.NodeAliasPath);
を会員ページノードID以外の何ものでもありません。これを使用して、私はすべての子アイテムを取得しています。 今このgetItemsには、私はすべての値を持っている私はどこにブログのページの親と子を完全に削除する必要があります。

私は、リストから、一致する親項目を削除するには、このコードを試してみました:

string excludeFileName = "583, 683, 686, 687"; 
 
        string[] arrStringList = excludeFileName.Split(','); 
 
        foreach (var excName in arrStringList) 
 
        { 
 
         getItems.RemoveAll(a => (a.NodeID == Convert.ToInt32(excName.Trim()) || a.NodeParentID == Convert.ToInt32(excName.Trim())) 
 
         || (a.Parent.NodeID == Convert.ToInt32(excName.Trim()) || a.Parent.NodeParentID == Convert.ToInt32(excName.Trim())) 
 
         || (a.Parent.Parent.NodeID == Convert.ToInt32(excName.Trim()) || a.Parent.Parent.NodeParentID == Convert.ToInt32(excName.Trim())) 
 
         || (a.Parent.Parent.Parent.NodeID == Convert.ToInt32(excName.Trim()) || a.Parent.Parent.Parent.NodeParentID == Convert.ToInt32(excName.Trim()))); 
 
        }

私は特定のノードがどのように多くのレベルを持って知っていれば、このコードは正常に動作しています。

しかし、ノードの一部にそのようなレベルがあまりない場合、このコードでは例外が発生します。

問題が見つかった場合は教えてください。

+1

のように、方法でこれらのほとんどを持っています。投稿したいと思うのはコードなので、API呼び出しを正しく使用しているかどうかを確認することができます。 –

+0

私は自分の質問を編集し、リストがどのように生成されているか理解するためのコードを追加しました。私はノードを削除するために使用したコードも追加しました。 –

+0

それでは、正確な質問や問題は何ですか? –

答えて

0

私はあなたが取っている道でちょっと混乱しています。特定のノードのすべての子を取得する場合は、NodeAliasPathがすべてのノードを取得しないようにしてください。"The/Parent/Node/Path"+"/%"

これは、すべての子ノードを一番下に選択します。

特定のレベルのレベルだけを取得したい場合は、親のNodeLevelを取得してから、クエリにNodeLevel <= "+(ParentNodeLevel+2)を追加して、すべての子と孫のみを取得します。

特定のノードを除外するには、 "NodeID not in(123,234)"を入力することもできます。

おそらくあなたが達成しようとしていることを明確に伝えることができれば、私たちはより簡単に手助けすることができます!

PS:私は、SQLを置くが、DocumentQueryオブジェクトは、「よく見える」提供している何.WhereNotIn("NodeID", ListOfNodeIDsToExclude)

+0

NodeAliasPath経由で、私はリストから項目を削除することができます。お返事をありがとうございます。 –

関連する問題