如何使用Web API, MVC5通过Repository从一个资源中的两个表返回数据

本文关键字:资源 一个 数据 返回 两个 API Web 何使用 MVC5 Repository 通过 | 更新日期: 2023-09-27 18:17:13

我正在使用Web API 2, MVC 5和我需要返回的资源应该是两个类似表的组合,具有区分它们的类型(即教师作业,学生作业)。该资源将需要CRUD操作。当前,请求进入控制器,控制器转到具有Linq查询从db提取数据的Repository:

public IQueryable<StudentAssignment> GetStudentAssignments(int activityID ) {
  return ActivityDBContext.StudentAssignements.Where(x => x.OrgID == this.MultiTenantID && x.ActivityID == activityID).OrderBy(x => x.StudentAssignementID).AsQueryable();
  }
public IQueryable<TeacherAssignments> GetTeacherAssignments(int activityID) {
  return ActivityDBContext.TeacherAssignments.Where(x => x.OrgID == this.MultiTenantID && x.ActivityID == activityID && x.IsActive).OrderBy(x => x.StaffAssignmentID).AsQueryable();
  }

在控制器中:

[HttpGet, Route("activities/{id:int}/assignments")]
public List<AssignmentExternalList> List(int id, int page = 1, int pageSize = 50) {
List<AssignmentExternalList> assignments = new List<AssignmentExternalList>()
   {
   Repository.GetStudentAssignments(id).ToExternal(page, pageSize),
   Repository.GetTeacherAssignments(id).ToExternal(page, pageSize)
   };
return assignments;
}

我的问题是,我应该这样做吗?我是一个新手。在一个linq查询中执行连接,而不是为每个Create、Update、Delete方法执行两个单独的查询,这样会更好吗?还有别的办法吗?

如何使用Web API, MVC5通过Repository从一个资源中的两个表返回数据

如果您希望在一个集合中返回它们(看起来您可能希望从分页参数中返回),则需要创建一个类,该类包含学生和教师作业的公共属性,并从该属性继承它们。然后让你的控制器返回父类型的集合。

[HttpGet, Route("activities/{id:int}/assignments")]
public List<Assignment> List(int id, int page = 1, int pageSize = 50) {
     List<Assignment> assignments = new List<Assignment>();
     assignments.AddRange(Repository.GetStudentAssignments(id).ToExternal(page, pageSize));
     assignments.AddRange(Repository.GetTeacherAssignments(id).ToExternal(page, pageSize));
     return assignments;
}

您可以创建一个方法来检索您的数据,并使用Linq Concat