2013-03-21 102 views
1

我有以下的LINQ查詢,但我想修改它,我想通過staffId分組,並只選擇那些ObservationDate是每個staffId最大值的記錄。在單個查詢中LINQ查詢GroupBy和Max

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 2013-03-21 11:06:39

回答

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 2016-05-30 10:08:29

+0

感謝您的提示。我做到了 – LM358 2016-05-30 10:41:21