Как получить ответ на основе двух разных идентификаторов в моем API? - PullRequest
0 голосов
/ 15 ноября 2018
public class Report
{
    [Key]
    public int ReportId { get; set; }

    [ForeignKey("Subjects")]
    public int SubjectId { get; set; }
    public Subjects Subjects { get; set; }

    [ForeignKey("Teacher")]
    public int TeacherId { get; set; }
    public Teacher Teacher { get; set; }

   [ForeignKey("MarkType")]
    public int MarkTypeId { get; set; }
    public MarkType MarkType { get; set; }
}

public class Teacher
{
    [Key]
    public int TeacherId { get; set; }

    [MaxLength(50)]
    [Required]
    public string FName { get; set; }

    [MaxLength(50)]
    [Required]
    public string LName { get; set; }

}

public class Student
{
    [Key]
    public int StudentId { get; set; }

    [MaxLength(50)]
    [Required]
    public string FName { get; set; }

    [MaxLength(50)]
    [Required]
    public string LName { get; set; }

    [ForeignKey("Grade")]
    public int GradeId { get; set; }
    public Grade Grade { get; set; }
}

public class Grade
{
    [Key]
    public int GradeId { get; set; }
    public int StudentGrade { get; set; }
}

public class Subjects
{
    [Key]
    public int SubjectId { get; set; }

    [MaxLength(50)]
    [Required]
    public string SubjectName { get; set; }
}

public class Terms
{
    [Key]
    public int TermId { get; set; }

    public int Term { get; set; }
}

public class MarkType
{
    [Key]
    public int MarkTypeId { get; set; }
    [MaxLength(20)]
    [Required]
    public string TypeName { get; set; }

}

public class StudentMark
{
    [Key]
    public int StudentMarkId { get; set; }

    [ForeignKey("Report")]
    public int ReportId { get; set; }
    public Report Report { get; set; }

    [ForeignKey("Student")]
    public int StudentId { get; set; }
    public Student Student { get; set; }

    public int Mark { get; set; }

    [ForeignKey("Terms")]
    public int TermId { get; set; }
    public Terms Terms { get; set; }

}

В API, который я создаю, я хочу иметь возможность использовать два разных идентификатора для получения более конкретного ответа.

var report = ReportDBContext.StudentMark
            .Include(p => p.Student.Grade).Include(p => p.Report)
            .Include(p => p.Terms).Include(a => a.Report.Subjects).Include(a => a.Terms)
            .Include(a => a.Report.MarkType).Include(a => a.Report.Teacher).ToList();

Это позволило мне получить StudentMark, а также связанные с ним объекты, но я хочу иметь возможность использовать Id студента и Id терма, чтобы получить оценки студента за этот термин и все связанные с ним предметы.студенту.Я новичок в Web API, поэтому, пожалуйста, дайте мне знать, если мне нужно добавить больше контекста.

1 Ответ

0 голосов
/ 15 ноября 2018

Если вы хотите выполнить запрос по StudentId или TermId, я предлагаю вам предоставить две разные конечные точки для этих двух разных запросов.Используйте LINQ Where для проверки ваших условий.

public StudentMark[] GetMarksByStudentId(int studentId) {
    return ReportDBContext.StudentMark
        /* .Include(...) */
        .Where(mark => mark.StudentId == studentId)
        .ToArray();
}

public StudentMark[] GetMarksByTermId(int termId) {
    return ReportDBContext.StudentMark
        /* .Include(...) */
        .Where(mark => mark.TermId == termId)
        .ToArray();
}

Если вы хотите выполнять запросы одновременно по StudentId и TermId, введите объект запроса для инкапсуляции ваших параметров.Вы можете проверить несколько условий в предложении Where с помощью AND &&.

public StudentMark[] FindMarks(StudentMarkQuery query) {
     return ReportDBContext.StudentMark
            /* .Include(...) */
            .Where(mark => mark.StudentId == query.StudentId
                        && mark.TermId == query.TermId)
            .ToArray();
}

. Класс StudentMarkQuery введен, поэтому вы можете добавлять дополнительные параметры без изменения общей сигнатуры конечной точки:

public class StudentMarkQuery {
    public int StudentId { get; set; }
    public int TermId { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...