C# 使用LINQ获取内部列表的值
我有以下简单的数据结构。学生列表,每个学生都有一个唯一的ID。每个学生都有一个他们注册的课程列表。课程也有唯一的ID,但将是多个studentCourses列表的成员(因为每个课程都由多个学生注册) 我试图通过studentId和courseId找到一个特定的等级值。我正在使用下面的linq查询。我对我的linq仍然有点动摇,我想知道我写的查询是否正确?它确实可以正常工作,但是否可以更改为更优雅/可读C# 使用LINQ获取内部列表的值,c#,linq,C#,Linq,我有以下简单的数据结构。学生列表,每个学生都有一个唯一的ID。每个学生都有一个他们注册的课程列表。课程也有唯一的ID,但将是多个studentCourses列表的成员(因为每个课程都由多个学生注册) 我试图通过studentId和courseId找到一个特定的等级值。我正在使用下面的linq查询。我对我的linq仍然有点动摇,我想知道我写的查询是否正确?它确实可以正常工作,但是否可以更改为更优雅/可读 class Student { int studentId; string s
class Student {
int studentId;
string studentName;
List<Course> studentCourses;
}
class Course {
int courseId;
string courseName;
int grade;
}
List<Student> students = new List<Student>();
//populate list.
int studentGrade = students
.Where(c => c.studentId == 1)
.Select(c => c.studentCourses.FirstOrDefault(a => a.courseId == 1).grade)
.FirstOrDefault();
班级学生{
国际学生;
字符串studentName;
列出学生的课程;
}
班级课程{
int courseId;
字符串courseName;
国际等级;
}
列出学生=新建列表();
//填充列表。
int studentGrade=学生
.其中(c=>c.studentId==1)
.选择(c=>c.studentCourses.FirstOrDefault(a=>a.courseId==1.grade)
.FirstOrDefault();
我会使用一些查询语法:
var studentGrade =
(from student in students
where student.studentId == 1
from course in student.studentCourses
where course.courseId == 1
select course.grade)
.FirstOrDefault();
如果查找的任何部分(学生/课程)失败,序列将为空,FirstOrDefault
将为零
这也可以通过
SelectMany
来完成,这就是这些中的多个所转换成的内容。如果您确定学生和课程存在的话
int studentGrade = students
.Where(d=>d.studentId == 1)
.FirstOrDefault().studentCourses
.FirstOrDefault(d=>d.courseId == 1).grade;
int studentGrade = students
.FirstOrDefault(s => s.studentId == 1).studentCourses
.FirstOrDefault(c => c.courseId == 1).grade;
还有类似的吗
var student = students.FirstOrDefault(s => s.studentId == 1);
var course = student != null ? student.studentCourses.FirstOrDefault(c => c.courseId == 1) : null;
int studentGrade = course != null ? course.grade : -1;
只是另一种方式int studentGrade=students.FirstOrDefault(s=>s.studentId==1).studentCourses.FirstOrDefault(c=>c.courseId==1).grade代码>