2017-08-07 4 views
1

私はその列が変更されないように、学生の教室が固定されているLINQは

StudentName /教室/ GradeA/GradeB/GradeC/GradeDate

としてテーブルを持っているリストを表示する複数のレコードから最新のレコードを取得します。

各生徒には、GradeD、GradeD、GradeCの値がそれぞれ異なるGradeDateがあります。

public virtual IList<ClassroomDetail> GetLatestClassroomDetail(string classroom) 
    { 

     var query = from pc in _classroomDetailRepository.Table 
        where pc.Classroom == classroom 
        select pc; 

     var result = new List<ClassroomDetail>(query); 

     return result; 
    } 

上記のクエリはすべてを返し、複数の同じ生徒がリストに含まれています。

どうすれば最新の値を取得できますか?

テーブル:

ClassroomMaster

  • イド
  • UpdateDate
  • 教室

ClassroomDetail

  • イド
  • Cm_Idは(ClassroomMaster IDで外部キーを持つ)コントローラで
  • StudentName
  • GradeA
  • GradeB
  • GradeC
  • GradeDate

var bdetail = _classroomService.GetLatestClassroomDetail(classroom).OrderBy(d => d.StudentName); 

      var model = new List<ClassroomDetail>(); 
      foreach (var pr in bdetail) 
      { 

       model.Add(new ClassroomDetail 
       { 
        Id = pr.Id, 
        Classroom = pr.Classroom, 
        StudentName = pr.StudentName, 
        GradeA = pr.GradeA, 
        GradeB = pr.GradeB, 
        GradeC = pr.GradeC, 
        GradeDate = pr.GradeDate, 
       }); 
      } 


      return PartialView(model); 
+0

最新の値のグループ化、あなたの問題を解決するのだろうか?もっと説明してください。 – CodeNotFound

+0

はい、1人の学生に1つのレコードがあり、最新のものは –

+0

です。私のコントローラでは、これをvar bdetail = _bunkerPriceService.GetLatestClassroomDetail(classroom).OrderBy(d => d.StudentName)と呼びます。 varモデル=新しいリスト(); foreach(var pr in bdetail) { –

答えて

1

それは学生によって

 var query = _classroomDetailRepository.Table 
     .Where(a => a.Classroom == classroom)    
     .Select(b => b.OrderByDescending(y => y.GradeDate).Take(1).FirstOrDefault()); 
1

私は最終的に解決策を見つけた:D

public virtual IList<ClassroomDetail> GetLatestClassroomDetail(string classroom) 
    { 
     var query = _classroomDetailRepository.Table 
      .Where(z => z.Classroom == classroom) 
      .GroupBy(x => x.StudentName)     
      .Select(x => x.OrderByDescending(y => y.GradeDate).Take(1).FirstOrDefault()); 

     var result = new List<BunkerPriceDetail>(query); 

     return result; 
    } 
+1

おそらく正しいが、冗長な '。'FirstOrDefault()'は多くても1つのレコードだけを返すので、Take(1) 'を呼び出します。 – tinudu

+1

編集が元に戻ったのはなぜですか?私が間違っている?はいの場合は理由を知りたいと思います。 – tinudu

+0

@tinuduオハイオ州、私は間違ってそれをやったと思います。申し訳ありません、両方の作品。ありがとうございました! –