У меня есть SQL-запрос (ниже), который по сути берет студента из tbStudents, а затем получает самый последний термин (число, но хранится как строку) в tbTerms.
Существует отношение один-ко-многим со студентом в tbStudents к записи семестра в tbTerms. Пример:
tbStudents:
StudentId FirstName LastName
12345 John Smith
12346 Jane Doe
tbTerms:
StudentId Term
12345 1234
12345 1235
12345 1236
12346 1233
12346 1234
Желаемая:
StudentId FirstName LastName Term
12345 John Smith 1236
12346 Jane Doe 1234
SQL-запрос:
select tbStudents.student_id, tbStudents.user_id, tbStudents.firstname, tbStudents.lastname, v.rTerm
from tbStudents
inner join (
select tbTerms.student_id, MAX(tbTerms.term) as rTerm
from tbTerms
group by tbTerms.student_id
) v on v.student_id = tbStudents.student_id
Я пытался объединить все это в одно утверждение LINQ, но у меня возникли проблемы. Есть ли способ сделать это в одном утверждении? Или это должно быть сделано в нескольких заявлениях. Спасибо заранее.
Редактировать: C # код того, что я пробовал.
var students = (from s in dockDb.tbStudents
join t in dockDb.tbTerms on s.student_id equals t.student_id
into pairs
from p in pairs
select new { UserId = s.user_id, StudentId = s.student_id, Term = p.term } ).ToList();
Вывод похож на:
StudentId FirstName LastName Term
12345 John Smith 1234
12345 John Smith 1235
12345 John Smith 1236
12346 Jane Doe 1233
12346 Jane Doe 1234
Редактировать # 2: я использую Entity Framework для данных. Я не уверен, влияет ли это на что-то, но большинство решений «синтаксически некорректны», когда я пытаюсь их использовать.