如何在不多次请求数据库的情况下获取数据?
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;
}
听起来好像您想一次性获取数据,无需多次查询数据库即可获取所有数据。实现应用程序的性能非常好。我的想法如下:
- 获取学生id列表。
- 在地址服务中定义一个函数,例如“GetListOfStudentByIds”,通过学生的列表ID获取数据。你可以在 Linq 中找到 Any 来处理数组。
- 你不需要这条线,
**
var addressItem = studentAddress.Where(m => m.IsPrimary = true).FirstOrDefault();
**
它使应用程序变慢。您可以在从 GetListOfStudentByIds 获取数据时添加条件。
谢谢
我正在尝试从数据库中获取数据并将数据导出到 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;
}
听起来好像您想一次性获取数据,无需多次查询数据库即可获取所有数据。实现应用程序的性能非常好。我的想法如下:
- 获取学生id列表。
- 在地址服务中定义一个函数,例如“GetListOfStudentByIds”,通过学生的列表ID获取数据。你可以在 Linq 中找到 Any 来处理数组。
- 你不需要这条线, ** var addressItem = studentAddress.Where(m => m.IsPrimary = true).FirstOrDefault(); ** 它使应用程序变慢。您可以在从 GetListOfStudentByIds 获取数据时添加条件。
谢谢