foreach 循环中的 foreach 循环

Posted

技术标签:

【中文标题】foreach 循环中的 foreach 循环【英文标题】:Foreach loop in foreach loop 【发布时间】: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 可能需要您添加到某种形式的集合中。 【参考方案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();
    

【讨论】:

以上是关于foreach 循环中的 foreach 循环的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView Array ForEach 迭代循环问题

如何在swiftUI中的Foreach循环上显示除一项之外的图像?

Parallel.ForEach 使用多线遍历循环

如何在 TypeScript 中打破 ForEach 循环

前端进阶知识

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考