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())); }