【问题标题】:Foreach loop in foreach loopforeach 循环中的 foreach 循环
【发布时间】:2021-05-28 21:25:44
【问题描述】:

我正在使用 foreach 循环将值插入数据库。我有两个学生在六年级和六个科目的同一班。当我运行它时,它只为所有学生上传一门科目,我想填充所有六年级学生的科目...我的代码在哪里需要迭代?

var source = context.Students.Include("ClassRoom").Where(x => x.ClassRoom.ClassName == searchLookUpEdit4.Text).ToList();
Evaluation ev = new Evaluation();
var source1 = context.Subjects.Include("ClassRoom").Where(x => x.ClassRoom.ClassName == searchLookUpEdit4.Text).ToList();

foreach (var stud in source)
{
    ev.StudentId = stud.Id;
    foreach (var sub in source1)
    {
        ev.SubjectId = sub.Id;
    }
    ev.TermId = Convert.ToInt32(searchLookUpEdit2.EditValue);
    ev.ObtainedMarks = 0;
    ev.Grades = "";
    ev.Remarks = "";
    context.Evaluations.Add(ev);
    context.SaveChanges();
}

【问题讨论】:

  • 只是一个提示,你不应该复制粘贴你不懂的代码。上面的代码告诉我你有一些高级的编程知识,下面的部分表明你还没有掌握基本的知识。
  • 我看到一个问题,似乎一个学生当然可以拥有多个科目,但是您的嵌套循环正在重新分配下一个科目,您没有添加另一个科目,您已经结束了- 写上一个。 ev.SubjectId 可能需要您添加到某种形式的集合中。

标签: c# winforms ef-code-first entity


【解决方案1】:

我认为你内部的foreach 循环没有正确编写。纠正大括号位置将解决此问题。

更正的代码:

var source = context.Students.Include("ClassRoom").Where(x => 

x.ClassRoom.ClassName == searchLookUpEdit4.Text).ToList();
Evaluation ev = new Evaluation();
var source1 = context.Subjects.Include("ClassRoom").Where(x => x.ClassRoom.ClassName == searchLookUpEdit4.Text).ToList();
    

foreach (var stud in source)
    {
        ev.StudentId = stud.Id;

        foreach (var sub in source1)
        {
            ev.SubjectId = sub.Id;
            ev.TermId = Convert.ToInt32(searchLookUpEdit2.EditValue);
            ev.ObtainedMarks = 0;
            ev.Grades = "";
            ev.Remarks = "";
            context.Evaluations.Add(ev);
            context.SaveChanges();
         }

    }

【讨论】:

    【解决方案2】:

    我假设您的意思是您希望每个学生和科目组合进行一次评估。在这种情况下,您应该这样做:

    foreach (var stud in source)
    {
        foreach (var sub in source1)
        {        
              var ev = new Evaluation();
              ev.StudentId = stud.Id;
              ev.SubjectId = sub.Id;
              ev.TermId = Convert.ToInt32(searchLookUpEdit2.EditValue);
              ev.ObtainedMarks = 0;
              ev.Grades = "";
              ev.Remarks = "";
              context.Evaluations.Add(ev);
              context.SaveChanges();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-26
      • 2012-07-19
      • 2020-02-19
      • 2013-10-01
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多