c# - 将 lambda 表达式转换为 linq c#
问题描述
我有学生名单和讲师名单,我用双 foreach 语句编写了代码。
有什么方法可以使用 Lambda 表达式简化此代码?
public void GetLecturersWorkloadStatistics(List<Student> studentList, List<Lecturer> lecturerList)
{
foreach (Lecturer lecturer in lecturerList)
{
foreach (Student student in studentList)
{
if (lecturer.ModuleName == student.ModuleName && lecturer.LastName == student.LecturerLastName &&
lecturer.FirstName == student.LecturerFirstName)
{
lecturer.Credits = lecturer.Credits + lecturer.ModuleValueInCredits;
}
}
}
}
解决方案
我认为您尝试的示例不起作用,因为它返回 anIEnumerable<Student>
并且您的方法应该返回 a List<Student>
;
您还缺少将&&
子句组合在一起所需的一些括号,因此它们由||
运算符分隔。
解决此问题的一种方法是将方法的返回类型更改为,并在子句IEnumerable<Student>
周围添加一些括号:&&
public IEnumerable<Student> GetStudentBySelectedLecturer(List<Student> linkedList,
string text)
{
var lecturerInformation = text.Split(' ');
return from stud in linkedList
where (stud.LecturerFirstName == lecturerInformation[0] &&
stud.LecturerLastName == lecturerInformation[1]) ||
(stud.LecturerFirstName == lecturerInformation[1] &&
stud.LecturerLastName == lecturerInformation[0])
select stud;
}
另一种方法是将返回值转换为 a List<Student>
:
public List<Student> GetStudentBySelectedLecturer(List<Student> linkedList,
string text)
{
var lecturerInformation = text.Split(' ');
return (from stud in linkedList
where (stud.LecturerFirstName == lecturerInformation[0] &&
stud.LecturerLastName == lecturerInformation[1]) ||
(stud.LecturerFirstName == lecturerInformation[1] &&
stud.LecturerLastName == lecturerInformation[0])
select stud).ToList();
}
当然还有一些潜在的问题,比如 iflinkedList
或者lecturer
is null
,或者里面没有空格(当你试图访问 index 时text
你会得到一个)。此外,您可以使用讲师姓名数组上的方法来简化您的条件:IndexOutOfRangeException
1
Contains
where
您可以通过执行以下操作来解决这些问题:
public IEnumerable<Student> GetStudentBySelectedLecturer(List<Student> students,
string lecturer)
{
if (students == null || lecturer == null) return null;
var lecturerName = lecturer.Split(' ');
return from student in students
where lecturerName.Contains(student.LecturerFirstName) &&
lecturerName.Contains(student.LecturerLastName)
select student;
}
推荐阅读
- java - 没有 android.inputmethodservice.Keyboard 的自定义键盘
- python - 制作自定义(tf.function)函数二维数组
- r - 如何在 R 的数据框中显示大数字?
- debugging - 使用 PIC16F1829 间接寻址时如何正确清除 RAM
- javascript - React 中的空状态,异步函数的调用
- c# - EF Core - 如果为 Null,则选择父值
- adfs - adfs 设置中的 itfoxtec-identity-saml2 颁发者是什么?
- kubernetes - jhipster kubernetes 部署没有redis
- javascript - 单击Jquery中的弹出按钮后如何显示刻度线?
- java - 在 Java Swing 中为 JFrame 添加背景