Query item relations using ContentLinksManager

Because the relations between items are represented only via content links, you can manipulate the relations directly via the ContentLinksManager.

You can retrieve all relations that a specific item has by specifying the ParentItemId, ParentItemProviderName, ParentItemType, andComponentPropertyName:

C#
using System;
using System.Linq;
using Telerik.Sitefinity.Data.ContentLinks;
using Telerik.Sitefinity.Model;

namespace SitefinityWebApp
{
   public class GetAllRelationsByParent
   {
       public IQueryable<IDataItem> GetRelationsByParent(Guid itemId, string itemProviderName, string itemTypeName, string fieldName)
       {
           ContentLinksManager contentLinksManager = ContentLinksManager.GetManager();

           var linksToRelatedItems = contentLinksManager.GetContentLinks()
               .Where(cl => cl.ParentItemId == itemId && 
                   cl.ParentItemProviderName == itemProviderName && 
                   cl.ParentItemType == itemTypeName && 
                   cl.ComponentPropertyName == fieldName);
           
           return linksToRelatedItems;

       }
   }
}

All parent items can be retrieved in the same manner. Note that parent items can be of different types.

EXAMPLE: You are using an Eventsbuilt-in module and a dynamic type Sessions, both having a relation to the dynamic type Locations. You also create a location item Big hall 1, event item Introduction, and session item jQuery, and the event item and session item both relate to location item Big hall 1. In this case, both the event item Introductionand session item jQuery are considered parent items of location item Big hall 1.

In order to retrieve the parent items, you have to explicitly specify the parent type in the following way:

C#
using System;
using System.Linq;
using Telerik.Sitefinity.Data.ContentLinks;
using Telerik.Sitefinity.Model;

namespace SitefinityWebApp
{
   public class GetAllRelationsByChild
   {
       public IQueryable<IDataItem> GetRelationsByChild(Guid itemId, string itemType, string itemProviderName, string parentItemTypeFullName)
       {
           ContentLinksManager contentLinksManager = ContentLinksManager.GetManager();

           var links = contentLinksManager.GetContentLinks()
               .Where(cl => cl.ChildItemId == itemId &&
                   cl.ChildItemType == itemType &&
                   cl.ChildItemProviderName == itemProviderName &&
                   cl.ParentItemType == parentItemTypeFullName);

           return links;
       }
   }
}
Want to learn more?
Enhance your Sitefinity skills by enrolling in free training sessions. Become Sitefinity certified through Progress Education Community to strengthen your professional credentials.
New to Sitefinity?