2013-03-21 1 views
1

다음 LINQ 쿼리가 있지만 staffId로 그룹화하고 각 staffId에 대한 ObservationDate가 Max 인 레코드 만 선택하려면이 쿼리를 수정하고 싶습니다.단일 쿼리에서 GroupBy 및 Max에 대한 LINQ 쿼리

from ob in db.TDTObservations.OfType<TDTSpeedObservation>() 
select new 
{ 
    Id = ob.ID, 
    AcademicYearId = ob.Teachers.FirstOrDefault().Classes.FirstOrDefault().AcademicYearID, 
    observationDate = ob.ObservationDate, 
    schoolId = ob.Teachers.FirstOrDefault().Classes.FirstOrDefault().SchoolID, 
    staffId=ob.Teachers.FirstOrDefault().ID 
}; 
+0

참조 http://stackoverflow.com/questions/4775125/linq-query-with-grouping-and-ranking – Tassadaque

답변

1
var observations = 
    from ob in db.TDTObservations.OfType<TDTSpeedObservation>() 
    select new { 
     Id = ob.ID, 
     AcademicYearId = ob.Teachers.FirstOrDefault().Classes.FirstOrDefault().AcademicYearID, 
     observationDate = ob.ObservationDate, 
     schoolId = ob.Teachers.FirstOrDefault().Classes.FirstOrDefault().SchoolID, 
     staffId=ob.Teachers.FirstOrDefault().ID 
    }; 

var result = from o in observations 
      group o by o.staffId into g 
      select g.OrderByDescending(x => x.observationDate).First(); 
0

이것에 대해 무엇을 : 이에 먼저 그룹화 한 후 자신의 ID하여 항목 (교사) 각 그룹 (GRP)에서 당신이 선택하는 최신 ObservationDate 한

var observations = from d in db.TDTObservations.OfType<TDTSpeedObservation>() 
        group d by d.Teachers.FirstOrDefault().ID into grp 
        select grp.OrderByDescending(g => g.ObservationDate).FirstOrDefault(); 
+0

답변을 자세히 설명해 주시겠습니까? 제공하는 솔루션에 대해 더 자세히 설명해 주시겠습니까? – abarisone

+0

힌트를 주셔서 감사합니다. 나는했다. – LM358