Я пытаюсь написать запрос в EF.
Рассмотрим эти отношения:
Цель состоит в том, чтобы собрать учителей с полной коллекцией учащихся, которые работают между определенным отфильтрованным периодом (от-до).
Я написал следующий запрос:
var filtered = _context.Teachers
.Join(_context.Students, // Target
fk => fk.Id, // FK
pk => pk.teacherId, // PK
(fk, pk) => new { teach = fk, students = pk }
)
.Where(i => i.students.date_active >= from &&
i.students.date_active <= to)
.OrderBy(i => i.teach.name)
.Select(i => i.teach)
.Include(i => i.Students)
.AsNoTracking();
С помощью этого запроса я получаю дублирующих учителей. Поэтому я просто добавлю оператор Distinct()
, и у меня есть учителя. Но тогда мой объект учителя все еще содержит всех учеников. Я хочу только студентов за этот период. Любая помощь о том, как получить хороший результат?
List<Dto.Teacher> list = filtered.Select(i => Dto.Teacher
{
id = i.Id,
name = i.name
Students = i.Students.Select(j => new Dto.Student
{
id = i.id,
date_active = i.date_active,
}).ToList(),
}).ToList();
public class Teacher()
{
public int id { get; set; }
public string name { get; set; }
public List<Dto.Student> Students { get; set; }
}