diff --git a/New_College.Repository/BASE/D_PlanMajorDescProRepository.cs b/New_College.Repository/BASE/D_PlanMajorDescProRepository.cs index 26d1bb8..328d776 100644 --- a/New_College.Repository/BASE/D_PlanMajorDescProRepository.cs +++ b/New_College.Repository/BASE/D_PlanMajorDescProRepository.cs @@ -44,50 +44,51 @@ namespace New_College.Repository RefAsync totalCount = 0; var pageresult = new PageModel(); request.Year = request.Year > 2024 ? 2024 : request.Year; - var pagelist = await this.Db.Queryable().Where(c => c.Location == request.Location) - .Where(c => c.Years == request.Year) - .Where(c => !string.IsNullOrWhiteSpace(c.Logo)) - .WhereIF(request.Sff.HasValue, c => c._211 == (request.Sff == 1 ? "是" : "否")) - .WhereIF(request.Nhef.HasValue, c => c._985 == (request.Nhef == 1 ? "是" : "否")) - .WhereIF(request.Syl.HasValue, c => c._SYL == (request.Syl == 1 ? "是" : "否")) - .WhereIF(request.Nature != null && request.Nature.Any(), x => SqlFunc.ContainsArray(request.Nature, x.Nature)) - .WhereIF(request.AreaName != null && request.AreaName.Any() && !request.AreaName.Contains("全国"), x => SqlFunc.ContainsArray(request.AreaName, x.AreaName)) - .WhereIF(request.SubjectLevel.HasValue, c => c.EducationCategory == (request.SubjectLevel == 1 ? "本科" : "专科")) - .WhereIF(!string.IsNullOrWhiteSpace(request.Name), c => SqlFunc.Contains(c.UniversityName, request.Name)).GroupBy(c => new - { - c.AreaName, - c.UId, - c.UniversityName, - c.Nature, - c._985, - c._211, - c._SYL, - c.SchoolType, - c.EducationCategory, - c.Rank, - c.Logo, - c.Web - }) - .Select(c => new UniversityPlanProView() - { - AreaName = c.AreaName, - ALLCount = SqlFunc.AggregateSum(c.PlanCount), - MajorCount = SqlFunc.AggregateCount(c.UId), - NewCount = SqlFunc.AggregateSum(c.NewCount), - UId = c.UId, - Name = c.UniversityName, - Nature = c.Nature, - _985 = c._985, - _211 = c._211, - _SYL = c._SYL, - Logo = c.Logo, - Web = c.Web, - UniversityType = c.SchoolType, - SubjectLevel = c.EducationCategory, - Rank = string.IsNullOrEmpty(c.Rank) ? "--" : c.Rank - }) - .OrderBy(k => k.UId, OrderByType.Asc) - .ToPageListAsync(request.PageIndex, request.PageSize, totalCount); + var pagelist = await this.Db.Queryable() + .Where(c => c.Location == request.Location) + .Where(c => c.Years == request.Year) + .Where(c => !string.IsNullOrWhiteSpace(c.Logo)) + .WhereIF(request.Sff.HasValue, c => c._211 == (request.Sff == 1 ? "是" : "否")) + .WhereIF(request.Nhef.HasValue, c => c._985 == (request.Nhef == 1 ? "是" : "否")) + .WhereIF(request.Syl.HasValue, c => c._SYL == (request.Syl == 1 ? "是" : "否")) + .WhereIF(request.Nature != null && request.Nature.Any(), x => SqlFunc.ContainsArray(request.Nature, x.Nature)) + .WhereIF(request.AreaName != null && request.AreaName.Any() && !request.AreaName.Contains("全国"), + x => SqlFunc.ContainsArray(request.AreaName, x.AreaName)) + .WhereIF(request.SubjectLevel.HasValue, c => c.EducationCategory == (request.SubjectLevel == 1 ? "本科" : "专科")) + .WhereIF(!string.IsNullOrWhiteSpace(request.Name), c => SqlFunc.Contains(c.UniversityName, request.Name)) + + // ✅ 关键:只按学校聚合(必要时带上地区) + .GroupBy(c => new { c.UId, c.UniversityName, c.AreaName }) + + .Select(c => new UniversityPlanProView + { + UId = c.UId, + Name = c.UniversityName, + AreaName = c.AreaName, + + // 其它字段用聚合“取一个值” + Nature = SqlFunc.AggregateMax(c.Nature), + _985 = SqlFunc.AggregateMax(c._985), + _211 = SqlFunc.AggregateMax(c._211), + _SYL = SqlFunc.AggregateMax(c._SYL), + UniversityType = SqlFunc.AggregateMax(c.SchoolType), + SubjectLevel = SqlFunc.AggregateMax(c.EducationCategory), + Logo = SqlFunc.AggregateMax(c.Logo), + Web = SqlFunc.AggregateMax(c.Web), + Rank = SqlFunc.AggregateMax(c.Rank), + + // ✅ 计划数合并 + ALLCount = SqlFunc.AggregateSum(c.PlanCount), + + // ⚠️ 你这里的 MajorCount 目前写法“数的是行数”,不一定等于专业数 + // 如果表里每行就是一个专业,那用 Count() OK;否则要 CountDistinct(专业ID/专业名) + MajorCount = SqlFunc.AggregateCount(1), + + NewCount = SqlFunc.AggregateSum(c.NewCount), + }) + .OrderBy(k => k.UId, OrderByType.Asc) + .ToPageListAsync(request.PageIndex, request.PageSize, totalCount); + pageresult.pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / request.PageSize.ObjToDecimal())).ObjToInt(); pageresult.page = request.PageIndex; pageresult.data = pagelist;