Reputation: 5
I am trying to create a query that joins the Student and Enrolled data on the ID and StudentID fields so that I may display only the names of the students who are enrolled in History, which would only be Steve Thomas as his ID is 3, as is the StudentID required for History.
My other query I made (IEnumerable student query) only accessed the student data, not enrolled. So I am unsure as to how I join the two together. Would I use multiple from's?
class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
public DateTime DateOfBirth { get; set; }
}
class Enrolled
{
public int StudentID { get; set; }
public string CourseName { get; set; }
}
IEnumerable<Student> students = new List<Student>()
{
new Student {FirstName = "Jim", LastName = "Smith", DateOfBirth = new DateTime(1990, 5, 21), ID = 1},
new Student {FirstName = "Diane", LastName = "Sawyer", DateOfBirth = new DateTime(1992, 11, 1), ID = 2},
new Student {FirstName = "Steve", LastName = "Thomas", DateOfBirth = new DateTime(1994, 4, 4), ID = 3},
new Student {FirstName = "Pablo", LastName = "Dicaz", DateOfBirth = new DateTime(1973, 3, 30), ID = 4},
new Student {FirstName = "Hannu", LastName = "Korppi", DateOfBirth = new DateTime(1988, 6, 16), ID = 5},
new Student {FirstName = "Marie", LastName = "St. Claude", DateOfBirth = new DateTime(1982, 1, 19), ID = 6}
};
var enrolllist = new List<Enrolled>
{
new Enrolled {CourseName = "Computer Science",StudentID = 2},
new Enrolled {CourseName = "Computer Science",StudentID = 5},
new Enrolled {CourseName = "History",StudentID = 1},
new Enrolled {CourseName = "Psychology",StudentID = 2},
new Enrolled {CourseName = "History",StudentID = 4},
new Enrolled {CourseName = "Computer Science",StudentID = 3},
new Enrolled {CourseName = "Psychology",StudentID = 6},
new Enrolled {CourseName = "History",StudentID = 3},
};
IEnumerable<Student> query = from s in students
where s.DateOfBirth.Year < 1990
orderby s.FirstName
select s;
foreach (Student stud in query)
{
Console.WriteLine(stud.FirstName);
Console.ReadLine();
}
Upvotes: 0
Views: 166
Reputation: 66439
You can join the two collections similar to how you'd join two tables in an SQL
query.
var query = (from s in students
join e in enrolllist on s.ID equals e.StudentID
where e.CourseName == "History"
select s)
The students.ID
field is joined to the enrolled.StudentID
field.
You can read more about how join
works here and here.
Upvotes: 1