How to get the first TreeNode from the TreeNodeCollection using API and FirstOrDefault() method
This article provides an example of getting the first TreeNode from the TreeNodeCollection of CMSContext.CurrentDocument.Children using LINQ method FirstOrDefault().
There is a small issue with casting objects for LINQ method FirstOrDefault(), because it’s working with the data type of IEnumerable. Casting the TreeNodeCollection to IEnumerable data type can be a little bit difficult. At first sight, it seems that the following code should work:
TreeNodeCollection myChildren = CMSContext.CurrentDocument.Children;
TreeNode firstChild = myChildren.FirstOrDefault();
…but it doesn’t (It looks like the TreeNodeCollection does not properly implement generic collections, so the standard LINQ commands will not work properly).
The correct way is:
using System.Linq;
using System.Collections.Generic;
// don't forget to use namespaces
CMS.TreeEngine.TreeNodeCollection myChildren = CMSContext.CurrentDocument.Children;
IEnumerable<CMS.TreeEngine.TreeNode> EnumChild = myChildren.AsEnumerable<TreeNode>();
CMS.TreeEngine.TreeNode myNode = EnumChild.FirstOrDefault<TreeNode>();
Finally you have the first (or the default)
TreeNode object from the
TreeNodeCollection returned by
CMSContext.CurrentDocument.Children.
See also: Managing documents,
Enumerable.FirstOrDefault<TSource> Method (IEnumerable<TSource>)
Applies to: Kentico CMS version 5.0 through version 7.0