按多个(包括子项)进行分组,然后求和

问题描述 投票:0回答:1

使用下表,我想对同一课程的每个部位的剂量进行求和,我想首先按课程进行分组,然后对部位进行分组,然后对剂量进行求和。

辐射

辐射ID 课程ID 剂量
1 1 10
2 1 20
3 2 5

辐射点

辐射ID 站点 ID
1 1
1 2
1 3
2 3
3 1

输出

课程ID 站点 ID 总剂量 课程名称 网站
1 1 10 课程1
1 2 10 课程1 脊柱
1 3 30 课程1 眼睛
2 1 5 课程2

我尝试了类似以下的方法,但无法理解它。

var 总计 = dbContext.Radiations.Include(r => r.RadiationSites).ThenInclude(s => s.Site).Include(r => r.RadiationCourse).Where(r => r.Nhi == NHI) .SelectMany(s => s.RadiationSites, (Radiation, RadiationSites) => new { Radiation, RadiationSites } ).GroupBy(r => r.Radiation.RadiationCourseId, r => r.RadiationSites.SiteId)

这可能吗?请帮忙!

c# lambda entity-framework-core
1个回答
0
投票

假设您有一个包含 SiteId 和 SiteName 列的 Sites 表以及一个包含 CourseId 和 CourseName 列的 Courses 表,您的查询将如下所示:

var totals = from rad in dbContext.Radiations
             join radSite in dbContext.RadiationSites on rad.RadiationId equals radSite.RadiationId
             join site in dbContext.Sites on radSite.SiteId equals site.SiteId
             join course in dbContext.Courses on rad.CourseId equals course.CourseId
             group new { rad, site.SiteName, course.CourseName } by new { rad.CourseId, radSite.SiteId } into grouped
             select new {
                 CourseId = grouped.Key.CourseId,
                 SiteId = grouped.Key.SiteId,
                 TotalDose = grouped.Sum(x => x.rad.Dose),
                 CourseName = grouped.Select(x => x.CourseName).FirstOrDefault(),
                 SiteName = grouped.Select(x => x.SiteName).FirstOrDefault()
             };

var result = totals.ToList();

这里

  • from ... join ... 语法用于根据以下条件连接表 他们的关系。
  • group ... by ... into 分组语法用于对结果进行分组 通过 CourseId 和 SiteId。
  • select new 语法用于预测最终结果,我们在其中 将每组的剂量相加,并选择课程名称和 SiteName 基于每个组中第一次出现的位置(假设 组内名称一致)。
  • 将 dbContext.Sites 和 dbContext.Courses 替换为实际的 DBSet 来自 DbContext 的属性(如果这些是您的名称) 包含站点和课程详细信息的实体。
© www.soinside.com 2019 - 2024. All rights reserved.