削除するノードの Name 属性が単純なパターンを使用して一致する場合、次のように動作するはずです。
Dim SchemaDoc As New XDocument(<Root><Group Name="Foo"/><Group Name="Node1"/>
<Group Name="Node2"/><Group name="Bar"/></Root>)
Dim NodesToRemove = From Element In SchemaDoc.<Root>.<Group> Where _
Element.@Name Like "NotNode?"
For Each XNode In NodesToRemove.ToArray()
XNode.Remove()
Next
NodesToRemove の列挙での ToArray() の使用に注意してください。これは、基になっているコレクションの変更を開始する前に XQuery の評価を強制するために必要です。
これが機能しない場合は、LINQ を使用する代わりの方法を次に示します (もともと、LINQ クエリに「not」を挿入しても機能しないと思っていましたが、別の答えでまっすぐになりました。毎日何か新しいことを学びます... ):
Dim NodesToRemove As New Collections.ObjectModel.Collection(Of XNode)
For Each Element In SchemaDoc.<Root>.<Group>
If Not BasicGroups.Contains(Element.@Name) Then
NodesToRemove.Add(Element)
End If
Next
パフォーマンスは、LINQ を使用する場合とほぼ同じです。