使用下表,我想对同一课程的每个部位的剂量进行求和,我想首先按课程进行分组,然后对部位进行分组,然后对剂量进行求和。
辐射
辐射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)
这可能吗?请帮忙!
假设您有一个包含 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();
这里