/// <summary> /// Filter an element list using another selector. A null selector results in no filtering; an /// empty string selector results in an empty list being return. /// </summary> /// /// <param name="elements"> /// The sequence to filter. /// </param> /// <param name="selector"> /// The selector. /// </param> /// /// <returns> /// The filtered list. /// </returns> protected IEnumerable <IDomObject> FilterElementsIgnoreNull(IEnumerable <IDomObject> elements, string selector) { if (selector == "") { return(Objects.EmptyEnumerable <IDomObject>()); } else if (selector == null) { return(elements); } else { Selector selectors = new Selector(selector).ToFilterSelector(); return(selectors.Filter(Document, elements)); } }
//<summary> // Filter an element list using another selector. A null selector results in no filtering. //</summary> //<param name="?"></param> //<param name="selector"></param> protected IEnumerable <IDomObject> filterElementsIgnoreNull(IEnumerable <IDomObject> elements, string selector) { if (selector == "") { return(Objects.EmptyEnumerable <IDomObject>()); } else if (selector == null) { return(elements); } else { SelectorChain selectors = new SelectorChain(selector); if (selectors.Count > 0) { selectors.Do(item => item.TraversalType = TraversalType.Filter); } // this is kind of unfortunate but is required to keep the order correct. Probably a more efficient // way to do it but works fine for now return(elements.Intersect(selectors.Select(Document, elements))); } }