How to create json crosstab result

There are three models:

Executor:

public class Contractor { public int Id { get; set; } public string Name { get; set; } public ICollection<ReportWork> ReportWorks { get; set; } } 

Report:

 public class Report { public int Id { get; set; } public string Name { get; set; } public ICollection<ReportWork> ReportWorks { get; set; } } 

Reporting work:

 public class ReportWork { public int Id { get; set; } public string ReportStatus { get; set; } public int ReportId { get; set; } public virtual Report Reports { get; set; } public int ContractorId { get; set; } public virtual Contractor Contractors { get; set; } } 

How to generate JsonResult from the following table:

  • Contractor Name Report.Name1 Report.Name2
  • Contractor .Name1 ReportWork.ReportStatus ReportWork.ReportStatus
  • Contractor .Name2 Not ReportWork.ReportStatus
  • Contractor .Name3 ReportWork.ReportStatus Not

I understand how to do this in Razor:

 <table> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Name) </th> @foreach (var it in ViewBag.Report) { <th> @it.Name </th> } </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <th> @Html.DisplayFor(modelItem => item.Name) </th> @foreach (var it in ViewBag.Report) { @if (item.ReportWorks.SingleOrDefault(c => c.ReportId == it.Id) != null) { <th> @item.ReportWorks.SingleOrDefault(c => c.ReportId == it.Id).ReportStatus </th> } else { <th> Not </th> } } </tr> } </tbody> </table> 

But how to do the same in Json in reality, form a table with N number of columns.

 [HttpGet] public JsonResult () { var events = from e in _context.Contractor from p in _context.ReportWork select new { id = e.Id, name = e.Name, // Add here columns with N number of reports }; var rows = events.ToArray(); return Json(rows); } 
+5
source share

Source: https://habr.com/ru/post/1275447/


All Articles