搜索对象列表
本文关键字:列表 对象 搜索 | 更新日期: 2023-09-27 18:02:05
我有一个学生对象的列表:List<StudentInfo>
。现在,StudentInfo对象具有某些参数,如Name、ID和Attendance。我想用两个东西来搜索列表。我想按学生名和学号搜索。查询应该返回studentInfo对象的考勤计数。以下是我尝试过的:
return studentInfoList
.Select((item) => new { value = item })
.Where(item => item.value.StudentName.Equals(name)
&& item.value.StudentID.Equals(id))
.Select(item => item.value.Attendance);
我该怎么做?
使用Count()
方法:
return studentInfoList
.Where(item => item.StudentName.Equals(name)
&& item.StudentID.Equals(id))
.Select(item => item.Attendance.Count());
// find student using conditions, suppose it may be only one
var student = studentInfoList
.SingleOrDefault(item => item.StudentName.Equals(name)
&& item.StudentID.Equals(id));
// found
if (student != null)
{
return student.Attendance;
}
else
{
// not found
}
我想试试这个
return studentInfoList.First(s => s.Name == name && s.StudentId == id).Attendance
为什么studentId不足以定位学生?
你的数据结构很难理解,但我已经尽力简化和清理了。
return studentInfoList
.Single(si => si.StudentName == name || si.StudentID == id)
.Attendance;
我假设你只需要名字或id来找到一个学生,而不是两者都需要。此外,考勤是一个整数,而不是一个数组。并且您需要确保它只针对单个学生,如果没有找到该学生,则应该抛出异常。
// return the student with the given name and ID or null, if it cannot be found
StudentInfo student =
studentInfoList.Where(item => item.StudentName == name
&& item.StudentID == id).SingleOrDefault();
if (student == null) {
// student not found
} else {
return student.Attendance;
}
如果您正在讨论找到的项目的出席属性,您只需要:
var count = studentInfoList
.Where(item => item.StudentName.Equals(name) && item.StudentID.Equals(id))
.Select(item => item.Attendance).FirstOrDefault();