2012-04-12 6 views
1

を変換できません:は、ラムダ式

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

私はこの行のエラーを取得:f => f.StudentID.Equals(studentID)

私はhttps://stackoverflow.com/questions/10116685/linq-deleted-users-still-associated-with-groupsここに私の以前の記事から難易度を有し、ここでDelete method in WCF

をだから私は、私はグループ内の学生を削除することができたかもしれないと思ったが、エラーが発生するラムダ式をデリゲート型ではないためStudent型に変換できない。

私がやろうとしていることについてちょうどいい日に、学生Aは複数のグループに属することができます。それから私がその学生を削除する場合、学生はもはやどのグループもリストするべきではありません。しかしそれはそうです。しかし、もし私が検索するとグループコンピューティング学生はそこにありません。私が学生を連れて、彼が属しているグループを検索すると(たとえ彼が削除されても)私が最初に追加したグループを返すように見えるだけです。これは収束したARGHHになります

+0

実際に学生を削除する必要がありますか、結果を表示または返すときにその学生を非表示にする必要がありますか? – arb

+0

私はあなたがそれらを隠すことができないと思います。学生IDまたは学生名からグループを取得すると、その学生を削除するとグループが返されます。それを隠す方法はないと思う。 –

+0

すでに回答が投稿されているようです。 fを説明するためには、これはbooleanです。これはEqualsの結果です。 –

答えて

7

述語を渡そうとしている場合は、RemoveAllメソッドを使用する必要があります。 Remove方法はまた、「更新」リストを返しませんREMOVEALL方法は、それがリストを更新し、単一の要素

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

になります。だからstudentsは更新されます。すなわち、StudentID == studentIDの学生はいません。

あなたはstudentsそのまま、新しいリストに要素をコピー

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

を維持し、そのリストに

P.S.をフィルタリングする場合両方のリスト内の共通オブジェクトは同じであり、すなわち、オブジェクトが1つのリスト内で更新される場合、第2のリスト内で更新される。 2番目のコピーが必要な場合は、深いクローンを実装する必要があります。これは、オブジェクトの同じプールからの2つのリストです。あなたの更新を

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

boolの戻り値の型を持っているRemoveAll ...........

+0

私がしようとすると、暗黙のうちにタイプintをリストに変換できないと言っている行全体にエラーが発生します –

+0

更新を参照してください。学生リストをそのまま、つまりStudentID == studentIDの学生なしでリストの新しいコピーを取得したいと思いますか? –

+0

いいえ、** student A **は複数の** Groups **に属することができます。それから私がその学生を削除する場合、学生はもはやどのグループもリストするべきではありません。しかしそれはそうです。しかし、私が**グループコンピューティング**を検索すると、その学生はそこにいません。私が学生を連れて、彼が属しているグループを検索すると(たとえ彼が削除されても)私が最初に追加したグループを返すように見えるだけです。これは避けたいものです –

2

を探しているようです。だからList<Group>List<Student>.Remove()から取得するつもりはありません。

var removed = students.RemoveAll(f => f.StudentID.Equals(studentID));を使用して、リストから削除された生徒のリストを取得できます。

しかし、学生のリストをList<Group>にするにはもう少しやり直す必要があります。あなたの質問には、変換の可能性があるかどうかを知るための十分な情報がありません。

2

List<T>.Remove()で試してみてくださいあなたは

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

ダム私の最後の希望がなくなった! –

+0

私はそうは思わない。質問を編集して、達成しようとしていることを詳細に説明してください。 – Khan

+0

私は自分の質問にリンクしている私のpreviosの投稿で2回jeffを試しました。みんなabitに困惑している。 –