如何在不多次请求数据库的情况下获取数据?

How to get the data without multiple requests to the database?

我正在尝试从数据库中获取数据并将数据导出到 csv,我可以做到这一点,但我担心的是让代码在 for each 循环中进入数据库,以获取数据和我已有的记录有关系。执行此操作以避免在 foreach 循环中访问数据库的最佳方法是什么?

    public async Task<FileResult> FetchAllStudents(int SchoolId)
    {
        var studentList = await student.GetAll(SchoolId);
        if (studentList != null)
            {
                StringBuilder sb = new();
                
                //Append new line character.
                sb.Append("\r\n");
               
                foreach (var item in studentList )
                 {
                       //Get address of each student in the list
                        var studentAddress = await address.GetAddressByStudentId(item.StudentId);

                        var addressItem = studentAddress.Where(m => m.IsPrimary = true).FirstOrDefault();

                        var data = $"{addressItem.AddressLine1},{item.StudentName}";

                        //Append data with comma(,) separator.
                         sb.Append(data);
             
                 }

                 return File(Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", "file.csv");
            }
       return null;
    }

听起来好像您想一次性获取数据,无需多次查询数据库即可获取所有数据。实现应用程序的性能非常好。我的想法如下:

  1. 获取学生id列表。
  2. 在地址服务中定义一个函数,例如“GetListOfStudentByIds”,通过学生的列表ID获取数据。你可以在 Linq 中找到 Any 来处理数组。
  3. 你不需要这条线, ** var addressItem = studentAddress.Where(m => m.IsPrimary = true).FirstOrDefault(); ** 它使应用程序变慢。您可以在从 GetListOfStudentByIds 获取数据时添加条件。

谢谢