2011-07-12 73 views
0

我有一个Student对象列表,如下所示:List<StudentInfo>。现在,StudentInfo对象具有某些参数,例如名称,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); 

我该怎么做?

+0

如果考勤是一个集合,写入item.value.Attendance.Count()应该足够了。 –

+0

您是否想要匹配的项目的总次数? –

+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

我认为出席是一个属性,而不是一个枚举.. 。? –

+0

@詹姆斯,我不是telepath :-) –

+0

它是一个财产 – Greg

1

我会尝试这个

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

为什么studentId不够的定位是学生吗?

+1

关于ID的好问题,保留在我的第一个()抛出,如果没有找到。可能使用FirstOrDefault()。 –

1

如果你说在发现该项目的考勤财产,你只需要:

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

如果你想假设没有找到的学生是零出勤,这是有效的,如果你想做一些特殊的事情,如果学生没有找到,@海因茨有一个更好的地方,你拉的学生,然后得到出席,如果不是空。 –

+0

我不能得到这个工作。每次返回0时 – Greg

+0

对不起,我仍然有你的价值。在那里从你的投影。 –

1

你的数据结构是很难理解的,但我已经尽力简化它和清理。

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

我假设你只需要姓名或身份证来找到学生,而不是两者。此外,出勤是一个整数,而不是一个数组。而且你需要确保它只针对一个学生,如果学生没有找到,它应该抛出异常。

+0

可能想给你的假设是,总是存在一个而且总是一个,条件应该是'&&'而不是'||' – Nix

+0

什么是单一的? – Greg

+0

@Greg它会通过列表来确保只有1项符合条件,否则抛出异常。 –

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