Kir*_*ite 1 c# linq wcf web-services
如果我尝试:
List<Student> students = new List<Student>();
List<Group> Groups = new List<Group>();
Groups = students.Remove(f => f.StudentID.Equals(studentID));
Run Code Online (Sandbox Code Playgroud)
我在这一行收到错误: f => f.StudentID.Equals(studentID)
我在以前的帖子中遇到了困难/sf/ask/708167981/这里在WCF中删除方法
所以我想也许我可以删除组中包含的学生,但是我收到错误无法将lambda表达式转换为类型Student,因为它不是委托类型.
只是快速了解我想要做什么,让我们说学生A可以属于多个组.然后,如果我删除该学生,学生不应再列出任何组.但确实如此.但是,如果我搜索,可以说群计算学生不在那里.只是当我带着学生并搜索他所属的组(即使他被删除)时,它才会返回我最初添加他的组.这个应该发生的事情
如果您尝试传入谓词,则必须使用RemoveAll方法.Remove方法接受单个元素
var numRemoved = students.RemoveAll(f => f.StudentID == studentID);
Run Code Online (Sandbox Code Playgroud)
此外,RemoveAll方法不返回"更新"列表,它会更新列表.所以students将更新列表,即它不会有学生StudentID == studentID.
如果要保留students原样,请将元素复制到新列表
var newStudentList = new List<Student>(students);
Run Code Online (Sandbox Code Playgroud)
然后过滤该列表
PS两个列表中的公共对象是相同的,即如果对象在一个列表中更新,它也会在第二个列表中更新.如果需要第二个副本,则必须实施深度克隆.这只是来自同一对象池的两个列表.
var numRemoved = newStudentList.RemoveAll(f => f.StudentID == studentID);
Run Code Online (Sandbox Code Playgroud)
随着您的更新,似乎您正在寻找
students.RemoveAll(s => s.StudentID == studentID);
Groups.ForEach(g => g.Groupsz.RemoveAll(gs => gs.StudentID == studentID));
Run Code Online (Sandbox Code Playgroud)