2016-02-26 118 views
0

我有查詢下面,如圖碼組學生通過classgroupenrollment導致數據嵌套組的LINQ實體框架

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

我再次希望將這個查詢結果和計算比例(其中是一個派生列),其中百分比大於40 ..

+0

@AlperTungaArslan如何計算百分比計數(百分比)。 想知道有多少學生通過了班級 –

+0

因此,您需要列表中的PassingRatioDTO對象的數量,其中Percentage> 40? – grek40

+0

@ grek40是的這樣的事情,想知道類「ABC」有多少學生有> 40 –

回答

0

如果您有您的初始查詢結果,您可以按照您的分組標準(ClassName)對其進行分組並計算符合條件的組內條目數(Count(x => x.Percentage > 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) 
    }; 
+0

@ gre40謝謝巴迪 –