Ich verwende LINQ, um eine Baumstruktur von Objekten aus einer Sammlung von Objekten aufzubauen, die von einem Aufruf einer gespeicherten Prozedur abgerufen wurden.Linq Elemente aus einer Sammlung in eine andere Sammlung entfernen
Ich möchte wissen, ob
a) es eine Möglichkeit ist, die Elemente aus einer Sammlung zu einer neuen Kollektion
b) zu entfernen, wenn es klug tatsächlich jeder Punkt Leistung ist dies etwas dabei
mein Code sieht wie folgt:
class MyEntity
{
int ID { get; set; }
int? ParentID { get; set; }
string Name { get; set; }
List<MyEntity> children = new List<MyEntity>();
List<MyEntity> Children { get { return children; } }
}
List<MyEntity> initialCollection = //get stuff from DB
List<MyEntity> rootElements = (from e in initialCollection
where e.ParentID == null
select e).ToList();
List<MyEntity> childElements = (from e in initialCollection
where e.ParentID != null
select e).ToList();
foreach(MyElement e in rootElements)
e.Children.AddRange((from c in childElements
where c.ParentID == e.ID
select c).ToList());
//do some more recursion
Also im Grunde; gibt es eine Möglichkeit, die select-Anweisung auszuführen, wobei ich die Elemente aus initialCollection
tatsächlich entferne, während ich sie auswähle. Die Idee ist es, die Anzahl der zu durchsuchenden Elemente zu reduzieren, während ich meinen Baum rekursiv aufbaue. Würde es tatsächlich einen Vorteil dabei geben, oder ist der Aufwand, Elemente aus einer Sammlung zu entfernen und zu einer anderen hinzuzufügen, zu groß?
Brilliant, eine wirklich schöne saubere Lösung dort. Prost. –