Subject 表添加 FinalSubjectVisitId 优化查询

Uat_Study
hang 2022-04-25 14:31:59 +08:00
parent 20d4ab82d6
commit e5443a5016
5 changed files with 28 additions and 17 deletions

View File

@ -57,7 +57,6 @@ namespace IRaCIS.Application.Contracts
public DateTime? VisitOverTime { get; set; }
public string Reason { get; set; } = string.Empty;
public Guid? FinalSubjectVisitId { get; set; }
}

View File

@ -39,20 +39,27 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode))
.ForMember(d => d.LatestBlindName, u => u.MapFrom(s => s.LatestSubjectVisit.BlindName))
.ForMember(d => d.LatestVisitName, u => u.MapFrom(s => s.LatestSubjectVisit.VisitName))
//.ForMember(d => d.IsSubjectSexView, u => u.MapFrom(s => s.Trial.IsSubjectSexView))
//.ForMember(d => d.IsSubjectExpeditedView, u => u.MapFrom(s => s.Trial.IsSubjectExpeditedView))
//不能对包含聚合或子查询的表达式执行聚合函数
//.ForMember(d => d.InPlanStudyCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan).Sum(k => k.StudyList.Count())))
//.ForMember(d => d.OutPlanStudyCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan==false).Sum(k => k.StudyList.Count())))
//.ForMember(d => d.InPlanDicomStudyUploadCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan).SelectMany(k => k.StudyList).Count()))
//.ForMember(d => d.OutPlanDicomStudyUploadCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan == false).SelectMany(k => k.StudyList).Count()))
//.ForMember(d => d.FinalSubjectVisitId, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.IsFinalVisit).Select(c => (Guid?)c.Id).FirstOrDefault()))
//.ForMember(d => d.FinalSubjectVisitName, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.IsFinalVisit).Select(c => c.VisitName).FirstOrDefault()))
.ForMember(d => d.FinalSubjectVisitId, u => u.MapFrom(s => s.FinalSubjectVisitId))
.ForMember(d => d.FinalSubjectVisitName, u => u.MapFrom(s => s.FinalSubjectVisit.VisitName))
//.ForMember(d => d.IsSubjectSexView, u => u.MapFrom(s => s.Trial.IsSubjectSexView))
//.ForMember(d => d.IsSubjectExpeditedView, u => u.MapFrom(s => s.Trial.IsSubjectExpeditedView))
//不能对包含聚合或子查询的表达式执行聚合函数
//.ForMember(d => d.InPlanStudyCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan).Sum(k => k.StudyList.Count())))
//.ForMember(d => d.OutPlanStudyCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan==false).Sum(k => k.StudyList.Count())))
//.ForMember(d => d.InPlanDicomStudyUploadCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan).SelectMany(k => k.StudyList).Count()))
//.ForMember(d => d.OutPlanDicomStudyUploadCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan == false).SelectMany(k => k.StudyList).Count()))
//.ForMember(d => d.InPlanNoneDicomStudyUploadCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan).SelectMany(k => k.NoneDicomStudyList).Count()))
//.ForMember(d => d.OutPlanNoneDicomStudyUploadCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan == false).SelectMany(k => k.NoneDicomStudyList).Count()))
//.ForMember(d => d.InPlanNoneDicomStudyUploadCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan).SelectMany(k => k.NoneDicomStudyList).Count()))
//.ForMember(d => d.OutPlanNoneDicomStudyUploadCount, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.InPlan == false).SelectMany(k => k.NoneDicomStudyList).Count()))
.ForMember(d => d.FinalSubjectVisitId, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.IsFinalVisit).Select(c=>(Guid?) c.Id).FirstOrDefault()))
.ForMember(d => d.FinalSubjectVisitName, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.IsFinalVisit).Select(c => c.VisitName).FirstOrDefault()))
.ForMember(d => d.InPlanVisitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.InPlan)))
.ForMember(d => d.OutPlanVisitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.InPlan == false)))
//执行不一定上传了 可能是失访 实际执行过了

View File

@ -13,10 +13,12 @@ namespace IRaCIS.Core.Domain.Models
{
public List<SubjectVisit> SubjectVisitList { get; set; } = new List<SubjectVisit>();
//public List<SubjectVisit> LastSubjectVisit { get; set; } = SubjectVisitList.where;
//受试者有TrialId SiteId
//public List<TrialSiteUser> TrialSiteUserList { get; set; } = new List<TrialSiteUser>();
[ForeignKey("FinalSubjectVisitId")]
public SubjectVisit FinalSubjectVisit { get; set; }
public Guid? FinalSubjectVisitId { get; set; }
//需要配置是两个键连接
@ -39,7 +41,7 @@ namespace IRaCIS.Core.Domain.Models
[ForeignKey("LatestSubjectVisitId")]
public SubjectVisit LatestSubjectVisit { get; set; }
public Guid? LatestSubjectVisitId { get; set; } = Guid.Empty;
public Guid? LatestSubjectVisitId { get; set; }
//public bool IsMissingImages { get; set; } = false;

View File

@ -26,7 +26,8 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
.HasPrincipalKey(c => new { c.TrialId, c.SiteId });
//不能同时配置一对多 和一对一 但是有时表要存储多的最新的 比如受试者 最新的访视 在这里要显示配置
//modelBuilder.Entity<Subject>().HasOne(s=>s.LatestSubjectVisit).WithOne(sv=>sv.Subject);
builder.HasOne(s => s.LatestSubjectVisit);
builder.HasOne(s => s.FinalSubjectVisit);
builder.HasMany(s => s.SubjectVisitList).WithOne(sv => sv.Subject);
}
}

View File

@ -26,6 +26,8 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
//.HasForeignKey(s => new { s.TrialId, s.SiteId })
//.HasPrincipalKey(c => new { c.TrialId, c.SiteId });
builder.HasOne(s => s.Subject).WithMany(sv => sv.SubjectVisitList);
}
}
}