using System.Collections.Generic;
public static void Main() {
List<ReportVM> report = criarMock();
List<DiagnosisReportVM> distinctDiagnosis = report.SelectMany(r => r.DiagnosesVM).Distinct().ToList();
Console.WriteLine("distinctDiagnosis: " + String.Join(", ", distinctDiagnosis.Select(d => d.DiagnosisId)) + "\n");
foreach (ReportVM r in report)
Console.WriteLine("report:\n\t" + String.Join(", ", r.DiagnosesVM.Select(d => d.DiagnosisId).Distinct()));
Console.WriteLine("\t" + String.Join(", ", r.DiagnosesVM.Select(d => distinctDiagnosis.IndexOf(d)).Distinct()) + "\n");
public static List<ReportVM> criarMock() {
List<ReportVM> report = new List<ReportVM>();
Random rdn = new Random();
for (int ri = 0; ri <= reportQtd; ri ++)
List<DiagnosisReportVM> diagnoses = new List<DiagnosisReportVM>();
int diagnosisQtd = rdn.Next(minDiagQtd, maxDiagQtd);
for (int di = 0; di <= diagnosisQtd; di ++)
List<ActionPlanReportVM> actionPlans = new List<ActionPlanReportVM>();
int apQtd = rdn.Next(minAPQtd, maxAPQtd);
for (int api = 0; api <= apQtd; api ++)
actionPlans.Add(new ActionPlanReportVM
Name = $"ActionPlan{api}",
diagnoses.Add(new DiagnosisReportVM
ActionPlansReport = actionPlans,
public List<DiagnosisReportVM> DiagnosesVM { get; set; }
public class DiagnosisReportVM : IEquatable<DiagnosisReportVM>
public int DiagnosisId { get; set; }
public string Name { get; set; }
public List<ActionPlanReportVM> ActionPlansReport { get; set; }
public bool Equals(DiagnosisReportVM obj)
return this.DiagnosisId == obj.DiagnosisId;
public override int GetHashCode()
int hashProductName = Name == null ? 0 : Name.GetHashCode();
int hashProductCode = DiagnosisId.GetHashCode();
return hashProductName ^ hashProductCode;
public class ActionPlanReportVM
public string Name { get; set; }