2017-07-04 13 views
0

私は、ツリービュー内にある必要がある構造内のすべての子ノードを返す関数GetChildrenを持っています。リストを取得<Guid>オブジェクトCから#

public static object GetChildrenNodes(IEnumerable<NodeDto> aNodes, Guid aNodeGuid) 
    { 
     var childrens = from childrenNode in aNodes 
         where (childrenNode.NodeParentGuid == aNodeGuid) 
         select new 
         { 
          id = childrenNode.NodeGuid, 
          text = childrenNode.Label, 
          nodes = (aNodes.Count(x => x.NodeParentGuid == childrenNode.NodeGuid) > 0) ? GetChildrenNodes(aNodes, childrenNode.NodeGuid) : null 
         }; 

     return childrens; 
    } 

この機能はそのままでなければなりません.TreeViewには、そのようなオブジェクトを作成する必要があるためです。

私は削除するノードのGUIDを取得するには、同じ機能を使用したいので、私は持っている:

object nodesList = GetChildrenNodes(nodeList, aNodeGuid); 

事は、私はそう、オブジェクトnodesListの「ID」sからList<Guid> guidsを取得したいです私はあなたの助けてください。

+0

なぜ彼らは非常に異なったことをしていると仮定して同じメソッドを使用したいですか? –

答えて

1

これを行う適切な方法は、TreeNodeクラスを定義して匿名クラスの代わりに使用することです。実際にこのメソッドを呼び出した後に.Selectを実行したい場合は、このメソッドを呼び出します。

あなたが主張していると言われました - あなたはダイナミックにキャストしようとすることができますか?そして、Idプロパティをキャスト...これは私がうんざりすると、あなたが本当にただのTreeNodeクラスを定義して、匿名クラスの代わりにそれを使用する必要がありますが...

List<Guid> guids = new List<Guid>(); 
for (var node in nodeList){ 
    guids.Add((Guid)(node as dynamic).Id); 
} 
2

を私がするのと同じ方法を使用しないでください。次の2つの異なる要件を持っている:

  • (私は与えられたノードID

の子供のためのGUIDのリストを作成UI

  • で使用するために匿名型のコレクションを構築しますすべての子孫ではなく、直接的な子供のみを望んでいるとすれば、それは明らかではありません)

    これらは同じフィルタを持つかもしれませんが、それはすべてです。私は、一般的な部分(フィルタリング)を分解し、それを呼び出す2つの異なるメソッドを持つことをお勧めします:

    private static IEnumerable<NodeDto> FindChildren(
        IEnumerable<NodeDto> allNodes, Guid parentId) => 
        allNodes.Where(node => node.NodeParentGuid == parentId); 
    
    public static object GetChildrenNodes(IEnumerable<NodeDto> allNodes, Guid parentId) => 
        FindChildren(allNodes, parentId).Select(node => 
        { 
         id = childrenNode.NodeGuid, 
         text = childrenNode.Label, 
         nodes = allNodes.Any(x => x.NodeParentGuid == node.NodeGuid) 
          ? GetChildrenNodes(allNodes, node.NodeGuid) : null 
        }); 
    
    public static List<Guid> FindChildIds(IEnumerable<NodeDto> allNodes, Guid parentId) => 
        FindChildren(allNodes, parentId).Select(node => node.NodeGuid).ToList(); 
    
  • 関連する問題