LINQ クエリー

LINQ クエリー

.NET では、FilteredElementCollector クラスが Elements の IEnumerable インタフェースをサポートします。要素のリストを処理するには、このクラスとともに LINQ クエリーと操作を使用します。このクラスが提供する ElementFilters とショートカット メソッドは、管理されたラッパーが作成される前に、要素をネイティブ コードで処理するため、作成された LINQ クエリーを使用して処理を試みる前に、コレクタにできるだけ多くのネイティブ フィルタを使用することでパフォーマンスを向上させることができます。

次の例では、ドキュメント内のすべての FamilyInstance 要素を取得するために ElementClassFilter を使用し、特定の名前でこれらの FamilyInstances に結果を絞り込むために LINQ クエリーを使用します。

コード領域 6-15: LINQ クエリーを使用

// Use ElementClassFilter to find family instances whose name is 60" x 30" Student 
ElementClassFilter filter = new ElementClassFilter(typeof(FamilyInstance));

// Apply the filter to the elements in the active document
FilteredElementCollector collector = new FilteredElementCollector(document);
collector.WherePasses(filter);

// Use Linq query to find family instances whose name is 60" x 30" Student
var query = from element in collector
                        where element.Name == "60\" x 30\" Student"
                        select element;

// Cast found elements to family instances, 
// this cast to FamilyInstance is safe because ElementClassFilter for FamilyInstance was used
List<FamilyInstance> familyInstances = query.Cast<FamilyInstance>().ToList<FamilyInstance>();