//This is student model
namespace StudentApp.Models
{
public class Student
{
[Key]
public int studentId { get; set; }
public List<AssignedSupervisor> assigned_supervisorId { get; set; }
}
public class AssignedSupervisor
{
[Key]
public int supervisorId { get; set; }
}
}
на основе модели студента, структура организация создала ниже дбИспользование Linq для возврата нескольких значений с помощью DTO
//Here is the sample db structure
//Table Students
studentId
---------
1
2
//Table Supervisors
supervisorId | studentId
------------ ---------
101 1
102 1
105 2
studentId является внешним ключом в таблице супервизора. Студенты могут назначить одного или нескольких руководителей. Требуемая мощность должна быть похожа на примере ниже:
{
"studentId": "1",
"supervisorId": [101,102]
},
{
"studentId": "2",
"supervisorId": [105]
}
Ниже DTO
//This is student DTO
namespace StudentApp.DTOs
{
public class StudentDTO
{
public int studentId { get; set; }
public List<AssignedSupervisor> assigned_supervisorId { get; set; }
}
}
В мой контроллер
namespace ContractingApp.Controllers
{
//first way I'm doing which returns ugly JSON.
public List<StudentDTO> GetStudents()
{
return db.Students.Select(s => new StudentDTO()
{
studentId = s.studentId,
//Not sure how to use the select statement with it
assigned_supervisorId = s.Supervisors.Where(
u => u.studentId == s.studentId
).ToList()
}).ToList();
}
//Another way I have tried after the suggestions by @darth_phoenixx I'm trying which doesn't return correct correct format either.
//It returns 3 JSON objects - one with each supervisor ID.
public List<dynamic> GetStudents()
{
var students = (from t1 in db.Students
join t2 in db.Supervisors on t1.studentId equals t2.studentId
select new
{
t1.studentId,
t2.supervisorId
});
return students.ToList<dynamic>();
}
}
Любая статья или направление, чтобы решить, будет полезна.
У вас есть таблица, содержащая сведения о супервизорах? Если это так, я думаю, вы, вероятно, захотите заглянуть в соединение - присоединение таблицы студентов к таблице супервизоров и получение супервизора из базы данных также на основе 'supervisor_internal_id'. Взгляните на [http://stackoverflow.com/questions/37324/what-is-the-syntax-for-an-inner-join-in-linq-to-sql](http://stackoverflow.com/ вопросы/37324/what-is-the-syntax-for-an-inner-join-in-linq-to-sql) –
@darth_phoenixx - Спасибо за помощь и ссылку. Я попытался использовать Join, но он не возвращает JSON в ожидаемом формате. Я обновил свой вопрос на примере требуемого формата. Пожалуйста, смотрите. Я рад предоставить дополнительную информацию, если потребуется. Самая большая проблема, с которой я столкнулся, - найти правильные слова, чтобы объяснить это. :) – sandiejat