如何在每个组的基本最大值上选择列表类属性?

时间:2015-12-29 11:45:25

标签: c# linq

如何在每个组的基本最大值上选择列表类属性? 我尝试过如下,但没有成功..

public class STUDENT_DETAIL
{            
    public long? Registration_Id { get; set; }
    public string Admission_No { get; set; }
    public long? Class_Id { get; set; }
    public long? Section_Id { get; set; }
    public long? Academic_Year_Id { get; set; }
    public string Student_First_Name { get; set; }
    public string Student_Last_Name { get; set; }
    public DateTime? Date_Of_Birth { get; set; }
    public string Gender { get; set; }
    public string Blood_Group { get; set; }            
}

List<CUSTOM_STU_DETAIL> academicYr = new List<CUSTOM_STU_DETAIL>();

public PartialViewResult ReAdmission_of_Student(long? CompanyId, long? CompanyLocationId, long AcademicId, long? ClassID, long? SectionID)
{
    if (CompanyId != null && CompanyId != 0 && CompanyLocationId != null && CompanyLocationId != 0 && ClassID != null && ClassID != 0 && SectionID != null && SectionID != 0)
    {
        academicYr = (from s in db.Student_Re_Admission
                             order by s.Re_Admission_Id descending
                             group s by s.Registration_Id into stugrp           

                                   //let topp = stugrp.Max(x => x.Re_Admission_Id)

        select new CUSTOM_STU_DETAIL
        {
        }).ToList();
    }

    ViewBag.Student_List = StuList.ToList();

    return PartialView();
}

其实我想在linq中使用以下sql查询概念。

select * from [Student_Re_Admission] where [Re_Admission_Id] in( SELECT max(Re_Admission_Id) FROM [Student_Re_Admission] group by Registration_Id )

1 个答案:

答案 0 :(得分:0)

Re_Admission_Id中没有STUDENT_DETAIL,因此请使用Admission_No代替。{/ p>

var maxReAdmissionIds =
            (from s in db.Student_Re_Admission
             group s by s.Registration_Id
                 into grp
                 select (grp.Max(p => Convert.ToInt32(p.Admission_No))).ToString())
                 .ToList();

Registration_Id分组,而不是先选择Admission_No到列表。

var result = from s in db.Student_Re_Admission
             where maxReAdmissionIds.Contains(s.Admission_No)
             select s;

然后,使用列表获得结果 但另一个值得关注的问题是,maxReAdmissionIds超过2100个元素会导致“sql在太多元素中”的例外情况。