无法转换 lambda 表达式
本文关键字:表达式 lambda 转换 | 更新日期: 2023-09-27 18:30:49
如果我尝试:
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 和这里遇到了困难 WCF 中的删除方法
所以我想也许我可以删除组中包含的学生,但我收到错误无法将 lambda 表达式转换为学生类型,因为它不是委托类型。
只是关于我正在尝试做什么的快速更新日期,假设学生 A 可以属于多个组。然后,如果我删除该学生,该学生不应再列出任何组。但它确实如此。但是,如果我搜索,假设组计算学生不在那里。似乎只有当我带学生并搜索他属于哪些组(即使他被删除)时,它才会返回我最初将他添加到的组。这不应该发生啊
如果要传入谓词,则必须使用 RemoveAll 方法。删除方法采用单个元素
var numRemoved = students.RemoveAll(f => f.StudentID == studentID);
此外,RemoveAll 方法不返回"更新"列表,而是更新列表。因此,students
将更新列表,即它不会有StudentID == studentID
的学生。
如果要按原样保留students
,请将元素复制到新列表中
var newStudentList = new List<Student>(students);
,然后筛选该列表
附言两个列表中的公共对象是相同的,即如果一个对象在一个列表中更新,它也会在第二个列表中更新。如果需要第二个副本,则必须实施深度克隆。这只是来自同一对象池的两个列表。
var numRemoved = newStudentList.RemoveAll(f => f.StudentID == studentID);
随着您的更新,您似乎正在寻找
students.RemoveAll(s => s.StudentID == studentID);
Groups.ForEach(g => g.Groupsz.RemoveAll(gs => gs.StudentID == studentID));
试试RemoveAll
List<T>.Remove()
的返回类型为 bool
。 所以你不会从List<Student>.Remove()
那里得到List<Group>
.
您可以使用var removed = students.RemoveAll(f => f.StudentID.Equals(studentID));
获取已从列表中删除的学生的列表。
但是你需要做更多的事情才能让学生名单成为List<Group>
。 您的问题中没有足够的信息来判断是否存在转换可能性。