0

我花了一整天的时间试图弄清楚如何在下面加入/分组我的查询,有人可以帮助我或指导我完成所需的输出吗?-i 附上一些外键值以便于参考)

Below is my Table Grade
rowID testID  studentID     Grade
1     1       1(class2011)  50
2     1       1(class2011)  90
3     2       1(class2011)  100
4     2       2(class2012)  85


--Student table
StudentID   Classyear
1           2(class2011)
2           3(class2012)
3           1(class2010)

--Classyear Table
ClassYearID    Desc
1              2010
2              2011     
3              2012

我在下面的查询(显示testID,失败(通过率= 80),通过,采取,率)

var h = list.GroupBy(a => a.testID)
        .Select(a => {
           int _failed = a.Count(g => g.Grade < 80);
           int _passed = a.Count(g => g.Grade >= 80);
           int _rate = (int)(_passed / (double)a.Count() * 100.0);

           return new {
             testID = a.Key,
             failed = _failed,
             passed = _passed,
             taken = a.Count(),
             rate = _rate,
          };     
        }); 

The result1
testID  failed  passed  taken   Rate
1       1       1       2       50%  
2       0       2       2       100%

现在这是我的大问题:我上面表中的学生不属于同一学年。我需要按 testID 和 classyear 对它进行分组。请参阅下面的所需输出:

testID  ClassyearID failed  passed  taken   Rate    
1       1(2010)     0       0       0       0
1       2(2011)     1       1       2       50%
1       3(2012)     0       0       0       0

2       1(2010)     0       0       0       0
2       2(2011)     0       1       1       100%
2       3(2012)     0       1       1       100%

您可以立即看到与结果 1 的差异。Test2 的统计数据分为 2011 年和 2012 年。

希望我确实解释得足够清楚我的意图。也许我稍后会发布我的糟糕代码,试图获得所需的输出。谢谢

4

1 回答 1

1

你不能这样做吗?:

var h = list.GroupBy(a =>new {a.testID,a.classyear})
        .Select(a => {
           int _failed = a.Count(g => g.Grade < 80);
           int _passed = a.Count(g => g.Grade >= 80);
           int _rate = (int)(_passed / (double)a.Count() * 100.0);

           return new {
             testID = a.Key.testID,
             classyear=a.Key.classyear,
             failed = _failed,
             passed = _passed,
             taken = a.Count(),
             rate = _rate,
          };     
        }); 
于 2013-11-11T14:01:21.117 回答