public static object Field(this TypedEntity coll, [MapsToAliasForQuerying] string fieldKey, [MapsToInnerAliasForQuerying] string valueKey, bool recursive)
        {
            var contentToCheck = new List <TypedEntity>(new[] { coll });

            if (recursive)
            {
                var newContent = new Content(coll.Id, coll.Attributes);
                contentToCheck.AddRange(newContent.AncestorContent());
            }

            foreach (var content in contentToCheck)
            {
                var field = content.Attributes.Where(x => x.AttributeDefinition.Alias == fieldKey).FirstOrDefault();
                if (field != null)
                {
                    var defaultValue = (!valueKey.IsNullOrWhiteSpace()) ? field.Values[valueKey] : field.Values.GetDefaultValue();
                    if (defaultValue != null && !defaultValue.ToString().IsNullOrWhiteSpace())
                    {
                        return(defaultValue);
                    }
                    //TODO: Update to be able to pass in Action<bool> to perform a null check based on specific types rather than just ToString
                }
            }

            return(null);
        }
 public static IEnumerable <Content> AncestorContentOrSelf(this Content content)
 {
     if (content == null)
     {
         return(Enumerable.Empty <Content>());
     }
     return(content.AsEnumerableOfOne().Union(content.AncestorContent()));
 }