public static IEnumerable<View> FindAllViewsWhereAllElementsVisible(
this IEnumerable<Element> elements)
{
if( null == elements )
{
throw new ArgumentNullException( "elements" );
}
//if( 0 == elements.Count )
//{
// return new List<View>();
//}
Element e1 = elements.FirstOrDefault<Element>();
if( null == e1 )
{
return new List<View>();
}
Document doc = e1.Document;
IEnumerable<View> relevantViewList
= doc.FindAllViewsThatCanDisplayElements();
IEnumerable<ElementId> idsToCheck
= ( from e in elements select e.Id );
return (
from v in relevantViewList
let idList
= new FilteredElementCollector( doc, v.Id )
.WhereElementIsNotElementType()
.ToElementIds()
where !idsToCheck.Except( idList ).Any()
select v );
}