C# 具有实体框架的LINQ中的嵌套组

C# 具有实体框架的LINQ中的嵌套组,c#,linq,entity-framework-6,C#,Linq,Entity Framework 6,我在下面有一个查询,它按类,组,注册对学生结果数据进行分组,如代码所示 public List<PassingRatioDTO> GetStudentPassingRatio() { using(SMSEntities em=new SMSEntities()) { try { List<PassingRatioDTO> result = (from results in em.ResultDetai

我在下面有一个查询,它按
注册
对学生结果数据进行分组,如代码所示

public List<PassingRatioDTO> GetStudentPassingRatio()
{
    using(SMSEntities em=new SMSEntities())
    {
        try
        {
            List<PassingRatioDTO> result = (from results in em.ResultDetails
                    where results.ExamDate.Year == 2016
                    group results by new {results.Class_Id, results.Group_Id, results.EnrollmentId } into groupedRresult
                    select new PassingRatioDTO()
                    {
                        Percentage = (((groupedRresult.Where(s => s.Status == "Pass").Count()) * 100) / groupedRresult.Count()),
                        ClassName = groupedRresult.Where(s => s.Class_Id == s.ClassDetail.Class_Id).Max(s => s.ClassDetail.ClassName),
                        GroupName = groupedRresult.Where(s => s.Group_Id == s.GroupDetail.Group_Id).Max(s => s.GroupDetail.Group_Name),
                        Year = groupedRresult.Max(s => s.ExamDate.Year),
                    }
            ).ToList();

            return result;
        }
        catch(Exception ex)
        {
            return null;
        }
   }
public List GetStudentPassingRatio()
{
使用(smsenties em=new smsenties())
{
尝试
{
列表结果=(来自em.ResultDetails中的结果
其中results.ExamDate.Year==2016
按新的{results.Class_Id,results.group_Id,results.EnrollmentId}将结果分组到GroupedResult中
选择新的PassingRatioDTO()
{
百分比=((GroupedResult.Where(s=>s.Status==“通过”).Count())*100)/GroupedResult.Count()),
ClassName=groupedResult.Where(s=>s.Class\u Id==s.ClassDetail.Class\u Id).Max(s=>s.ClassDetail.ClassName),
GroupName=groupedResult.Where(s=>s.Group\u Id==s.GroupDetail.Group\u Id).Max(s=>s.GroupDetail.Group\u Name),
年份=groupedResult.Max(s=>s.ExamDate.Year),
}
).ToList();
返回结果;
}
捕获(例外情况除外)
{
返回null;
}
}

我想再次对该查询结果进行分组,并计算百分比(这是一个派生列),其中百分比大于40。

如果您有初始查询结果,您可以根据分组条件(
ClassName
)对其进行分组,并计算符合条件的组内条目数(
count(x=>x.百分比>40)
):


@AlperTungaArslan它将如何计算百分比。在客户端,你想知道一个类中有多少学生通过了考试,所以你想知道列表中对象的通过次数,其中百分比>40?@grek40是的,类似这样,想知道“ABC”类中有多少学生通过了百分比>40
var results = GetStudentPassingRatio();
var passingCounts = from result in results
    group result by result.ClassName into classResults
    select new /* some object type */
    {
        ClassName = classResults.Key,
        PassCount = classResults.Count(x => x.Percentage > 40)
    };