繁体   English   中英

在 C# 中迭代​​两个列表

[英]Iterating over two lists in c#

因此,我有一个函数可以从 Web 服务获取学生列表,并查询 localdb 中的所有学生。 数据被放置在两个不同的列表中。 所以我想检查一个新学生是否已经存在于 localdb 列表中。 如果是,则更新它,如果不是,则添加它。 我无法让它工作。 我正在尝试使用 LINQ 执行此操作,但似乎无法正常工作。 我的 LINQ 技能充其量只是业余水平。

        public async Task GetStudents()
    {
        String controllerName = "Students";

        List<Students> newStudentData = await RunGetAsync<Students>(controllerName);

        // get all the service types that already exists in the localStudent Db
        List<Students> currentStudentData = db.Studentss.ToList();

        foreach (Students existingStudents in currentStudentData)
        {
            foreach (Students newStudents in newStudentData)
            {
                IEnumerable<Students> selectStudents = from student in newStudentData  // check if Students exist in the database
                                                             where student.Id == existingStudents.Id
                                                             select student;

                if (selectStudents == null) // didn't find it, then add it
                {
                    db.Students.Add(newStudents);
                }
                if (selectStudents != null) // found it , then update the informations
                {
                    Students updatedStudents = new Students();
                    foreach (var field in selectStudents)
                    {
                        updatedStudents.FName = field.FName;
                        updatedStudents.LName = field.LName;
                        updatedStudents.ZipCode = field.ZipCode;
                        updatedStudents.AccessCode = field.AccessCode;
                    }
                    db.Entry(updatedStudents).State = System.Data.Entity.EntityState.Modified;
                }
            }

        }
        db.SaveChanges();
    }

非常感谢您的帮助。

您循环的次数超出了您的需要:

foreach (Students newStudents in newStudentData)
{
     var student = currentStudentData.FirstOrDefault(s => s.Id == newStudents.Id);

     if(student == null)
     {
          //add
     }
     else
     {
         //update
     }
}

使用FirstOrDefault您可以找出它是否存在并同时获取对它的引用(如果存在)。

您可以使用 Intersect 和 except 如下所示:

        //Find students that already exist to update
        var updateStudents = currentStudentData.Intersect(newStudentData);

        //Find new students to add
        var addStudents = newStudentData.Except(currentStudentData);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM