如何使用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方法执行两个单独的查询,这样会更好吗?还有别的办法吗?
如果您希望在一个集合中返回它们(看起来您可能希望从分页参数中返回),则需要创建一个类,该类包含学生和教师作业的公共属性,并从该属性继承它们。然后让你的控制器返回父类型的集合。
[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