c# - 无法转换 lambda 表达式

标签 c# wcf linq web-services

如果我尝试:

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

所以我想也许我可以删除组中包含的学生,但我收到一个错误 Cannot convert lambda expression to type Student 因为它不是委托(delegate)类型。

只是一个关于我想要做什么的快速更新,让我们说学生A 可以属于多个组。然后,如果我删除该学生,则该学生不应再列出任何组。但确实如此。但是,如果我搜索让我们说 群算学生不在那里。似乎只有当我带学生并搜索他所属的组(即使他被删除)时,它才会返回我最初将他添加到的组。这不应该发生

最佳答案

如果你试图传递谓词,你必须使用 RemoveAll方法。 Remove方法接受单个元素

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

此外,RemoveAll 方法不会返回“更新”列表,它会更新列表。所以students将更新列表,即它不会有 StudentID == studentID 的学生.

如果要保留 students照原样,将元素复制到新列表
var newStudentList = new List<Student>(students);

然后过滤该列表

附言两个列表中的公共(public)对象是相同的,即如果一个对象在一个列表中更新,它也会在第二个列表中更新。如果需要第二个副本,则必须实现深度克隆。这只是来自同一对象池的两个列表。
var numRemoved = newStudentList.RemoveAll(f => f.StudentID == studentID);

随着您的更新,您似乎正在寻找
students.RemoveAll(s => s.StudentID == studentID);
Groups.ForEach(g => g.Groupsz.RemoveAll(gs => gs.StudentID == studentID));

关于c# - 无法转换 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128641/

相关文章:

c# - 如何通过编码将复选框添加到datagridview

c# - 调用 webservices 时 Prism 可以模块化吗?

wcf - 生成 WCF 代理作为构建过程的一部分

c# - 从数组\列表中的字符串中删除非常量重复的单词

C#从linq组中的日期获取分钟数

c# - 如何确定本地时间是否针对夏令时进行了调整?

c# - 匹配负序

sql - 如何实现自定义评级系统(日期相关性下降)

C# 分组变量赋值

由 c# silverlight wcf mysql