搜索对象列表

时间:2011-07-12 16:21:53

标签: c# .net

我有一个Student对象列表:List<StudentInfo>。现在,StudentInfo对象具有某些参数,例如Name,ID和Attendance。我想通过两件事来搜索列表。我想按学生姓名和学生ID搜索。查询应返回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);

我该怎么做?

5 个答案:

答案 0 :(得分:1)

使用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
}

答案 1 :(得分:1)

我会尝试这个

return studentInfoList.First(s => s.Name == name && s.StudentId == id).Attendance

为什么学生不足以找到学生?

答案 2 :(得分:1)

如果您正在谈论找到的项目的出勤属性,您只需要:

var count = studentInfoList
    .Where(item => item.StudentName.Equals(name) && item.StudentID.Equals(id))
    .Select(item => item.Attendance).FirstOrDefault();

答案 3 :(得分:1)

您的数据结构很难理解,但我已尝试简化并清理。

return studentInfoList
    .Single(si => si.StudentName == name || si.StudentID == id)
    .Attendance;

我假设您只需要姓名或ID来找到学生,而不是两者。此外,Attendance是一个整数,而不是一个数组。并且您需要确保它仅适用于单个学生,如果找不到该学生,则应该例外。

答案 4 :(得分:1)

// 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;
}