//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; }
}
}
Basierend auf dem Schülermodell, Entity Framework erstellt die folgenden dbVerwenden Linq mehrere Werte mit DTO
//Here is the sample db structure
//Table Students
studentId
---------
1
2
//Table Supervisors
supervisorId | studentId
------------ ---------
101 1
102 1
105 2
StudentID ist ein Fremdschlüssel in den Supervisor Tabelle zurückzukehren. Studenten können einen oder mehrere Supervisor zugewiesen bekommen. Erforderliche Ausgabe sollte auf das folgende Beispiel ähnelt:
{
"studentId": "1",
"supervisorId": [101,102]
},
{
"studentId": "2",
"supervisorId": [105]
}
Unten ist die DTO
//This is student DTO
namespace StudentApp.DTOs
{
public class StudentDTO
{
public int studentId { get; set; }
public List<AssignedSupervisor> assigned_supervisorId { get; set; }
}
}
In meinem Controller
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>();
}
}
Jeder Artikel oder Richtung wird zu lösen hilfreich sein.
Haben Sie eine Tabelle mit den Details der Supervisor? Wenn ja, denke ich, dass Sie wahrscheinlich in einen Join schauen wollen - indem Sie die Studenten-Tabelle mit der Supervisor-Tabelle verbinden und den Supervisor aus der Datenbank herausholen, basierend auf der 'supervisor_internal_id'. Werfen Sie einen Blick auf [http://stackoverflow.com/questions/37324/what-is-the-syntax-for-an-inner-join-in-linq-to-sql](http://stackoverflow.com/ Fragen/37324/Was-ist-die-Syntax-für-eine-innere-join-in-linq-to-sql) –
@darth_phoenixx - Danke für die Hilfe und den Link. Ich habe versucht, Join zu verwenden, aber es gibt das JSON nicht im erwarteten Format zurück. Ich habe meine Frage mit einem Beispiel für das erforderliche Format aktualisiert. Bitte schau. Ich bin gerne bereit, weitere Informationen zur Verfügung zu stellen. Das größte Problem, vor dem ich stehe, ist, die richtigen Worte zu finden, um es zu erklären. :) – sandiejat