在linq中使用groupby进行多次连接

时间:2015-07-14 06:42:34

标签: c# linq

我有5个表,我希望使用linq.i获取一些信息,使用以下查询从数据中读取数据。

var query = (from GRD in _tblStudents.GetQueryable() 
             join apt in _tblApplicants.GetQueryable() 
                  on GRD.ApplicantID equals apt.ApplicantID
             join cls in _tblClasses.GetQueryable() 
                  on GRD.CityID equals cls.ClassID
             join prg in _tblPrograms.GetQueryable() 
                  on cls.ProgramID equals prg.ProgramID
             join city in _tblCities.GetQueryable() 
                  on GRD.CityID equals city.CityID
             where GRD.AcademicYearID == yearId && cls.ProgramID == programId
             group apt by new{apt.Gender} into grouped
             select new CityWiseStudentModel
             {
                  CityName=city.CityName, 
                  //'city' does not exist in the current context
                  Gender = grouped.Count(),
                  programName=prg.Program, 
                 //'prg' does not exist in the current context
              }   

           );

如何从城市表中获取城市名称以及 prg 表中的程序名称

2 个答案:

答案 0 :(得分:4)

group <--> by <--> into <-->已将您的范围更改为IGrouping<a,b>

我的观点不仅是apt.Gender是你的关键,而是city.CityNameprg.Program

试试这个(或类似的):

group apt by new{apt.Gender, city, prg} into grouped
select new CityWiseStudentModel
{
     CityName = grouped.Key.city.CityName, 
     Gender = grouped.Count(), //rename GenderCount
     programName = grouped.Key.prg.Program,
     // Gender = grouped.Key.Gender,
} 

答案 1 :(得分:1)

请注意,grouped 只会保留您已分组的内容。如果您只对adt进行分组,则city和{{1} }将无法在您的选择中使用。

所以你需要:

  1. 城市计划纳入prg(否则他们无法使用)
  2. 访问grouped 集合中的CityNameProgram
  3. 这样的事情可以解决问题:

    grouped