2012-04-12 5 views
1

를 변환 할 수 없습니다 내가하려고하면 : f => f.StudentID.Equals(studentID)은 람다 식을

여기 여기 내 이전 게시물 https://stackoverflow.com/questions/10116685/linq-deleted-users-still-associated-with-groups에서 어려움과 Delete method in WCF

그래서 난을 데 :

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

내가이 줄에 오류가 그룹 내에 포함 된 학생을 삭제할 수 있다고 생각했지만 오류가 발생했습니다. 람다 식을 델리게이트 형식이 아니기 때문에 Student로 입력 할 수 없습니다.

제가 뭘 하려는지에 관해서는 바로 학생 A은 여러 그룹에 속할 수 있습니다. 그런 다음 해당 학생을 삭제하면 학생은 더 이상 그룹을 나열하지 않아야합니다. 하지만 그렇습니다. 그러나 내가 검색하면 말을한다 그룹 컴퓨팅 거기의 학생 isnt. 학생을 데려다가 그가 속한 그룹을 검색 할 때 (삭제 된 경우에도) 원래 내가 추가 한 그룹이 반환됩니다. 이 문제가 발생했습니다.

+0

정말로 학생을 삭제하거나 결과를 표시/반환 할 때 학생을 숨길 필요가 있습니까? – arb

+0

나는 그들을 숨길 수는 없다고 생각합니다. 학생 ID 또는 학생 이름에서 그룹을 얻으면 그 학생을 삭제하면 그룹이 반환됩니다. 관련 그룹과 공유 할 수 있습니다. 그걸 숨길 방법이 없다고 생각하세요. –

+0

이미 게시 된 답변과 같습니다. f를 설명하는 것은 부울이며, 이것은 Equals의 결과입니다. –

답변

7

조건자를 전달하려는 경우 RemoveAll 메서드를 사용해야합니다. Remove 방법은 또한, "업데이트"목록을 반환하지 않는에서 removeAll 방법은,이 목록을 업데이트하는 하나의 요소

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

에 걸립니다. 따라서 students은 목록이 업데이트됩니다. 즉, 학생은 StudentID == studentID이되지 않습니다.

해당 목록을

P.S.을 그대로 students을 보존 새 목록에

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

을 요소를 복사 한 다음 필터링하려면 두 목록의 공통 객체는 동일합니다. 즉, 객체가 하나의 목록에서 업데이트되는 경우 두 번째 목록에서도 업데이트됩니다. 두 번째 사본이 필요하면 딥 복제를 구현해야합니다. 이것은 같은 개체 풀의 두 목록 일뿐입니다. 당신의 업데이트와

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

는, 당신이 RemoveAll ...........

+0

만약 내가 전체 라인에 오류가 발생했다면 함축적으로 타입 int를리스트로 변환 할 수 없다는 것을 말하십시오 –

+0

업데이트를보십시오. 학생 목록을 그대로 유지 하시겠습니까? 즉, StudentID == studentID 인 학생없이 목록의 새 사본을 얻고 싶습니까? –

+0

아니요, ** 학생 A **는 여러 개의 ** 그룹 **에 속할 수 있습니다. 그런 다음 해당 학생을 삭제하면 학생은 더 이상 그룹을 나열하지 않아야합니다. 하지만 그렇습니다. 그러나 ** 그룹 컴퓨팅 **을 검색하면 학생은 거기 있지 않습니다. 학생을 데려다가 그가 속한 그룹을 검색 할 때 (삭제 된 경우에도) 원래 내가 추가 한 그룹이 반환됩니다. 이것은 매우 복잡합니다. –

2

찾고있는 것 같다. 따라서 List<Group>List<Student>.Remove()에서받지 못할 것입니다.

var removed = students.RemoveAll(f => f.StudentID.Equals(studentID));을 사용하면 어떤 학생이 목록에서 삭제되었는지 확인할 수 있습니다.

그러나 학생 목록을 List<Group>으로 지정하려면 좀 더해야합니다. 귀하의 질문에 충분한 정보가 없으므로 전환 가능성이 있는지 알 수 없습니다.

2

List<T>.Remove()bool의 반환 유형이 함께 시도

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

Damm 내 마지막 희망이 사라 졌어요! –

+0

나는 그렇게 생각하지 않는다. 귀하의 질문을 편집하여 귀하가 성취하고자하는 것을 자세히 설명해 주시면 도와 드리겠습니다! – Khan

+0

나는 내 질문에 링크 된 내 previos 게시물에서 두 번 jeff을 시도했습니다. 누구나 abit을 곤두박질 친다. –

관련 문제