表格是:从子级别到父级别:
TRAINING_TEACHER> TEACHER> INSTITUTE> SUBDISTRICT> DISTRICT ZONE(DIVISION)
我需要显示学院名称,并且由SUBDISTRICT参加培训组的男女老师。我的视图模型是:
public class TRAINING_STATUS_VIEW_MODEL
{
public int countMale { get; set; }
public int countFemale { get; set; }
public ZONE ZONE_VIEW_MODEL { get; set; }
public DISTRICT DISTRICT_VIEW_MODEL { get; set; }
public SUBDISTRICTUPAZILA_VIEW_MODEL { get; set; }
public INSTITUTE INSTITUTE_VIEW_MODEL { get; set; }
}
其中countMale,countFemale是TRAINING_TEACHER表中每个学院的教师数量。 TEACHER表中有一个性别列。 现在这里是我无法按学院和计数进行分组的查询。
var trainingStatusReport =
from trainingTeacher in db.TRAINING_TEACHER
join teacher in db.TEACHERs on trainingTeacher.TEACHER_NO equals teacher.TABLE_ID
join institute in db.INSTITUTEs on teacher.INS_ID equals institute.INS_ID
join subDistrict in db.subDistricts on institute.LOC_ID equals (decimal)subDistrict.LOC_ID
join district in db.DISTRICTs on (decimal)subDistrict.DCODE equals (decimal)district.DCODE
join zone in db.ZONEs on district.ZC equals zone.ZC
select new TRAINING_STATUS_VIEW_MODEL {
..........
.......... I can't go here
} ;
我已经通过institute.ins_id尝试了group institute,但无法在select部分编写代码。
答案 0 :(得分:0)
使用进一步加入的分组是可能的,但可能效率低下。
是一个更好的联接替代方案let
语句来简化任何其他复杂逻辑。以下是如何将两者结合起来的示例。这会解决问题吗?
var trainingStatusReport =
from trainingTeacher in db.TRAINING_TEACHER
group trainingTeacher by trainingTeacher.Teacher.Institute into instituteGroup
let institute = instituteGroup.Select(t => t.Teacher.Institute).FirstOrDefault()
select new TRAINING_STATUS_VIEW_MODEL
{
countMale = instituteGroup.Count(t => t.Teacher.Gender == Male),
countFemail = instituteGroup.Count(t => t.Teacher.Gender == Femail),
ZONE = institute.SubDistrict.District.Zone,
DISTRICT = institute.SubDistrict.District,
SUBDISTRICT = institute.SubDistrict,
INSTITUTE = institute
};