2011-07-12 2 views
0

私はStudentオブジェクトのリストをList<StudentInfo>として持っています。ここで、StudentInfoオブジェクトには、名前、ID、出席などの特定のパラメータがあります。私は2つのことでリストを検索したい。私は学生名と学生IDで検索したい。クエリは、studentInfoオブジェクトのAttendanceカウントを返す必要があります。ここに私が試したものがあります:オブジェクトリストの検索

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

@ジェームス、私はテレパスではありません:-) –

+0

それはプロパティです – Greg

1

私は学生を見つけるのに十分ではないstudentIdれるのはなぜこの

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

をしようとするだろうか?

+1

IDにつきましては良い質問ですが、見つからない場合はFirst First()にスローしてください。代わりにFirstOrDefault()を使用してください。 –

1

あなたが見つかったアイテムの出席プロパティを話している場合は、あなただけの必要があります。

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

生徒が見つからないと仮定したい場合、これは機能します。生徒が見つからない場合に特別なことをしたい場合、@Heinziは生徒を引っ張った方が良いでしょう。 –

+0

これはうまく動作しません。それは毎回0を返します – Greg

+0

申し訳ありません私はまだあなたの価値がありました。あなたの計画からそこに。 –

1

あなたのデータ構造を理解するのは難しいですが、私はそれを簡素化し、クリーンアップしようとしました。

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

私は、学生を探すために名前またはIDだけを必要としています。また、Attendanceは整数であり、配列ではありません。そして、あなたはそれが一人の学生のためだけであることを確認する必要があります、そして、学生が見つからなければ、それは例外を投げるべきです。

+0

あなたの前提にしたいと思うかもしれませんが、いつも常に存在し、条件は '&&'ではありません '||' – Nix

+0

何が.Singleですか? – 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; 
} 
関連する問題