2015-07-14 18 views
7

tôi có 5 bảng mà từ đó tôi muốn lấy một số thông tin bằng cách sử dụng linq.i đang sử dụng truy vấn sau để đọc dữ liệu từ dữ liệu.Nhiều tham gia với groupby trong linq

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 
       } 

      ); 

Làm thế nào tôi có thể có được tên thành phố từ thành phố bảng và tên chương trình từ PRG bảng

+0

Thử 'join into' thay vì chỉ' join' để truyền bá các mục được nhóm trong toàn bộ truy vấn. Lưu ý rằng bạn sẽ cần phải viết lại truy vấn vì bạn không thể có 'join' trực tiếp theo sau' join into' (cần một 'select' trung gian). – Kryptos

Trả lời

4

group <--> by <--> into <--> được thay đổi phạm vi của bạn để IGrouping<a,b>

Ý kiến ​​của tôi là không chỉ apt.Gender là chìa khóa của bạn nhưng city.CityNameprg.Program

hãy thử điều này (hoặc som e tương tự):

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

Hãy nhớ rằng grouped sẽ chỉ giữ những thứ bạn đã nhóm. Nếu bạn chỉ nhóm adt, thì cityprg sẽ không khả dụng trong lựa chọn của bạn.

Vì vậy, bạn sẽ cần phải:

  1. Bao gồm thành phốchương trình vào grouped (nếu không họ không có sẵn)
  2. Tiếp cận CityNameProgram bên trong bộ sưu tập grouped

Điều gì đó tương tự anh ta lừa:

... 
group new { apt, cls, prg, city } by new{apt.Gender} into grouped 
select new CityWiseStudentModel 
{ 
    CityNames = grouped.Select(g => g.city.CityName), 
    ... 
    programNames = grouped.Select(g => g.prg.Program) 
} 
+1

Tôi nghĩ rằng '= ap' bị thất lạc. – Rawling

+0

@Rawling, hoàn toàn đúng. Cố định nó :) –