Bulut Kartal
Bulut Kartal

Reputation: 103

LINQ Get Latest Record from Multiple Records to List

I have a table as

StudentName / Classroom / GradeA / GradeB / GradeC / GradeDate

The students classrooms are fixed so that column never changes.

Each student has multiple GradeA, GradeB and GradeC values with different 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;
    }

Above query returns everything and there are multiple same students in the list.

How can I only get latest values?

Tables:

ClassroomMaster


ClassroomDetail

On Controller

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);

Upvotes: 3

Views: 3609

Answers (2)

Bulut Kartal
Bulut Kartal

Reputation: 103

I finally found the solution :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;
    }

Upvotes: 1

Terrible Coder
Terrible Coder

Reputation: 980

It will solve your problem

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

Upvotes: 2

Related Questions