搜索对象列表

本文关键字:列表 对象 搜索 | 更新日期: 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();