2012-04-12 9 views
1

konvertieren Wenn ich versuche:Kann nicht Lambda-Ausdruck

List<Student> students = new List<Student>(); 
List<Group> Groups = new List<Group>(); 
Groups = students.Remove(f => f.StudentID.Equals(studentID)); 

ich auf dieser Linie einen Fehler: f => f.StudentID.Equals(studentID)

ich Schwierigkeiten hier aus meinen früheren Beiträgen https://stackoverflow.com/questions/10116685/linq-deleted-users-still-associated-with-groups und hier Delete method in WCF

So habe ich dachte vielleicht, ich könnte die in Gruppen enthaltenen Schüler löschen, aber ich bekomme einen Fehler Kann Lambda-Ausdruck nicht in den Typ Student konvertieren, weil es kein Delegattyp ist.

Nur ein schnelles Datum, was ich versuche zu tun, sagen wir Student A kann zu mehreren Gruppen gehören. Wenn ich diesen Schüler dann lösche, sollte der Schüler keine Gruppen mehr auflisten. Aber es tut. Aber wenn ich suche, sagen wir Group Computing der Student ist nicht da. Nur scheint es, wenn ich den Studenten nehme und suche, zu welchen Gruppen er gehört (selbst wenn er gelöscht wird), gibt er die Gruppe zurück, zu der ich ihn ursprünglich hinzugefügt habe. SHOULDNT HAPPEN ARGHH

+0

Müssen Sie den Schüler wirklich löschen oder nur versuchen, sie zu verstecken, wenn Sie die Ergebnisse anzeigen/zurückgeben? – arb

+0

Ich denke nicht, dass Sie sie verstecken könnten, wenn ich eine Gruppe von einem Studenten-ID oder Studentenname ERHÄLT, wird die Gruppe zurückgeben, wenn ich diesen Studenten lösche, kann ich GET die Gruppe, der es zugeordnet ist. Glauben Sie nicht, dass es eine Möglichkeit gibt, das zu verbergen. –

+0

Sieht aus wie die bereits geposteten Antworten. Um zu erklären, dass f ein Boolescher Wert ist, ist es das Ergebnis von Equals. –

Antwort

7

Wenn Sie versuchen, das Prädikat übergeben, müssen Sie die Methode verwenden. Remove Methode nimmt in einem einzigen Element

var numRemoved = students.RemoveAll(f => f.StudentID == studentID); 

Auch die RemoveAll Methode, um die „aktualisierte“ Liste nicht zurückkehrt, wird die Liste aktualisiert. So würde Liste aktualisiert werden, d. H. Es hätte keine Studenten mit StudentID == studentID.

Wenn Sie die students wie es ist, kopieren Sie die Elemente zu einer neuen Liste

var newStudentList = new List<Student>(students); 

zu erhalten und filtern, dann diese Liste

P. S. Die gemeinsamen Objekte in beiden Listen sind die gleichen, d. H. Wenn ein Objekt in einer Liste aktualisiert wird, wird es auch in der zweiten Liste aktualisiert. Wenn eine zweite Kopie benötigt wird, muss das tiefe Klonen implementiert werden. Dies sind nur zwei Listen aus demselben Pool von Objekten.

var numRemoved = newStudentList.RemoveAll(f => f.StudentID == studentID); 

Mit Ihrem Updates, es scheint, dass Sie für

students.RemoveAll(s => s.StudentID == studentID); 
Groups.ForEach(g => g.Groupsz.RemoveAll(gs => gs.StudentID == studentID)); 
+0

Wenn ich versuche, dass ich den Fehler auf der ganzen Zeile bekomme, kann nicht implizit konvertieren Typ int zu Liste –

+0

Siehe das Update. Möchten Sie die Schülerliste unverändert lassen, d. H. Sie möchten eine neue Liste ohne die Schüler mit StudentID == studentID erhalten? –

+0

Nein, sagen wir, ** Schüler A ** kann zu mehreren ** Gruppen ** gehören. Wenn ich diesen Schüler dann lösche, sollte der Schüler keine Gruppen mehr auflisten. Aber es tut. Wenn ich jedoch ** Group Computing ** suche, ist der Student nicht da. Nur scheint es, wenn ich den Studenten nehme und suche, zu welchen Gruppen er gehört (selbst wenn er gelöscht wird), gibt er die Gruppe zurück, zu der ich ihn ursprünglich hinzugefügt habe. SHOULDNT HAPPEN ARGHH –

2

Versuchen Sie suchen mit RemoveAll ...........

2

List<T>.Remove() einen Rückgabetyp von bool hat. Sie erhalten also keine List<Group> von List<Student>.Remove().

Sie können var removed = students.RemoveAll(f => f.StudentID.Equals(studentID)); verwenden, um eine Liste der Schüler zu erhalten, die aus der Liste entfernt wurden.

Aber Sie müssen ein wenig mehr tun, um diese Liste von Schülern zu erhalten, um ein List<Group> zu sein. In Ihrer Frage gibt es nicht genügend Informationen, um festzustellen, ob eine Konvertierungsmöglichkeit besteht.

+0

Damm meine letzte Hoffnung weg! –

+0

Ich glaube nicht. Bearbeiten Sie Ihre Frage und erklären Sie detailliert, was Sie erreichen möchten und wir helfen Ihnen weiter! – Khan

+0

Ich habe zweimal Jeff in meinen vorherigen Posts versucht, die ich in meiner Frage verlinkt habe. Jeder ist etwas ratlos. –