переупорядочить данные с помощью отношения родитель-потомок в asp. net -core - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно перегруппировать данные с помощью отношения родитель-потомок. Тесты являются родительскими, а TestParameter - дочерними по отношению к Тестам Как и

Test1 
   TestPara1 
   TestPara2 
   TestPara3 

Test2 
   TestPara1 
   TestPara2 
   TestPara3

, данные должны быть представлены в таблице в указанном формате.

Модели приведены здесь:

Тесты моделей

public class Tests
{
[Key]
public int Id { get; set; }

[Required]
[Display(Name = "Test Name")]
public string TestName { get; set; }

[Display(Name = "Short Name")]
public string  ShortName { get; set; }

[Display(Name="Technical Name")]
public string  TechName { get; set; }

[Required]
[Display(Name ="Test Price")]
public float TestPrice { get; set; }

[Display(Name = "Sub Department")]
public int SubDeptId { get; set; }

[Display(Name = "Center")]
public int CenterId { get; set; }

public string Separate { get; set; }

[Display(Name = "Sub Department")]
[ForeignKey("SubDeptId")]
//relation of departments table
public virtual SubDepartments subDepartments { get; set; }

[Display(Name = "Centers")]
[ForeignKey("CenterId")]
//relation of departments table
public virtual Centers centers  { get; set; }
}

Model TestParameter

public class TestParameter
{
[Key]
public int Id { get; set; }

[Required]
public string Categories { get; set; }

[Required]
[Display(Name = "Test Parameter Name")]
public string ParameterName { get; set; }

[Required]
public string Unit { get; set; }

[Display(Name ="Decimal Point")]
public int DecimalPoint { get; set; }

[Display(Name = "Help Value")]
public string HelpValue { get; set; }

[Display(Name = "Normal Range")]
public string NormalRange { get; set; }

public string Minimum { get; set; }

public string Maximum { get; set; }

[Display(Name="Test Footer")]
public string TestFooter { get; set; }

[Display(Name = "Tests Name")]
public int TestId { get; set; }

[ForeignKey("TestId")]
//relation of departments table
public virtual Tests Tests { get; set; }
}

Model PatientTest

public class PatientTest
{
[Key]
public int Id { get; set; }

[Display(Name ="Patient Id")]
public int PatientId { get; set; }

[Display(Name ="Test Id")]
public int TestId { get; set; }

[Display(Name ="Doctor")]
public int DoctorId { get; set; }

[Display(Name="Center")]
public int CenterId { get; set; }

[Display(Name = "Test")]
[ForeignKey("TestId")]
//relation of Tests table
public virtual Tests Tests { get; set; }

[Display(Name = "Doctor Reference")]
[ForeignKey("DoctorId")]
//relation of Doctors table
public virtual Doctors Doctors { get; set; }

[Display(Name = "Center Reference")]
[ForeignKey("CenterId")]
//relation of Centers table
public virtual Centers Centers { get; set; }

[Display(Name = "Patient")]
[ForeignKey("PatientId")]
//relation of Patient table
public virtual Patient Patient { get; set; }
}

PatientTests содержит отношения пациента, тесты, параметры теста.

контроллер - это PatientTestsController, заданный здесь

public async Task<IActionResult> TestResult([FromForm]Patient_Tests_TestParameter pt)
    {

        if (pt.patient.VisitNo == null)
        {
            return NotFound();
        }
        Patient_Tests_TestParameter pttp = new Patient_Tests_TestParameter();
        var visitno = pt.patient.VisitNo;
        pttp.patient = _db.Patient.Single(p=>p.VisitNo==visitno);

        var patientTests = _db.PatientTests
                    .Include(x => x.Tests)
                    .Where(x => x.PatientId == pttp.patient.Id)
                    .ToList();
        var testIds = patientTests.Select(x => x.TestId).ToList();
        var testParameters = _db.TestParameters
            .Where(x => testIds.Contains(x.TestId))
            .ToList();

        ViewData["test"] = patientTests;
        ViewData["testPara"] = testParameters;
        return View(pttp);
    }

данные должны быть представлены ViewData ["test"] и ViewData ["testPara"] ViewData ["test"] является родителем ViewData ["testPara"]

...