【问题标题】:C# For Each Loop, using database entityC# For Each Loop,使用数据库实体
【发布时间】:2016-04-19 16:58:55
【问题描述】:

我有一个名为 db1104983 的数据库,我使用的是实体框架 6。 我的数据库由一张名为 Student 的表组成。所以我在数据库中的所有条目都是学生。

我正在尝试创建一个函数来计算通过的班级人数。

DB 已经有一个字段 FinalGrade,用于保存每个学生的最终成绩。如果是A-D级则视为及格

我原来有以下

int classSize = context.Students.Count();                   
int FinalPercentage = passedStudents / classSize * 100;                  
MessageBox.Show(+FinalPercentage + "% of the class have passed!");

然后在我将新的学生对象添加到数据库之前,我有这段代码

               if (s1.FinalGrade == "A")
                {
                    PassedStudents++;
                }

                else if (s1.FinalGrade == "B")
                {
                    PassedStudents++;
                }
                else if(s1.FinalGrade =="C")
                {
                    PassedStudents++;

                }
                else if (s1.FinalGrade == "D")
                    PassedStudents++;
                else
                {
                    //do nothing
                }

但是它似乎在我可以使用它之前处理了传递的学生变量,所以我正在尝试执行以下操作

private void displayPercentage(object s1, int passedStudents)
    {
        using (db1104983Entities1 context = new db1104983Entities1())
        {
    foreach(Student in context) 
    if( s1.FinalGrade== "A" || s1.Finalgrade == B || s1.Finalgrade == C  

|| s1.FinalGrade == D)
    {
        passedStudents++
    } 
    else {

        //do nothing
             }
        }
    }

但是它给了我各种各样的错误,所以我不确定这是否是正确的做法。任何帮助将不胜感激。

谢谢。

        }









    }
}

【问题讨论】:

    标签: c# wpf foreach entity-framework-6


    【解决方案1】:

    似乎您可以从一个数据库查询中获取此信息

    var results = (from student in context.Students
                   group student by 1 into grp
                   select new
                   {
                       ClassSize = grp.Count(),
                       PassingStudents = grp.Count(s => s.FinalGrade != "F")
                   }).Single();
    var passingPercent = 100.0 * (double)results.PassingStudents / (double)results.ClassSize;
    

    这假定“F”代表所有未及格的学生。如果您有学生将使用null 或其他成绩,您可以将其替换为s.FinalGrade == "A" || s.FinalGrade == "B" || s.FinalGrade == "C" || s.FinalGrade == "D"

    【讨论】:

    • 太好了,非常感谢!!我可以高兴得跳起来哈哈。 E也是失败的。我将如何将其添加到查询中?再次感谢好友
    • 在这种情况下,您可以使用s.FinalGrade != "F" && s.FinalGrade != "E"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 2015-11-02
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多