entity-framework - 如何根据我的 API 中的两个不同 ID 获得响应?
问题描述
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 中,我希望能够使用两个不同的 ID 来获得更具体的响应。
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 的初学者,所以如果我需要添加更多上下文,请告诉我。
解决方案
如果您想通过StudentId
或进行查询TermId
,我建议您为这两个不同的查询提供两个不同的端点。使用 LINQWhere
检查您的条件。
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; }
}
推荐阅读
- javascript - 无法在 PHP 中访问上传文件
- android - 如何遍历 JSONObject 以找到最后一个数据点?
- angular - 在 Angular 中为模板驱动的表单应用表单验证
- c# - 是否有 NuGet 包或内置方法可以使用 c# 将字符串转换为另一个有意义的字符串或虚拟数据
- python - Python 电子邮件验证 mx 检查失败
- java - 屏幕锁定时如何使Android手机的麦克风工作
- php - 如何为此代码创建类 DB::table('users')->where("id",1")->get();
- python - 继续从类变量中获取 NameError?
- javascript - 如何使用本机反应显示/渲染来自 mongoDB 的图像?
- swagger - 如何使用springdoc更改swagger授权屏幕上的文本