在 C# 中使用 linq 方法编写和下载 csv 文件返回错误数据

Writing and downloading a csv file using linq methods in c# is returning wrong data

在 ASP.NET Core 中,我使用 Linq 方法从数据库中的 Prescriptions table 中获取数据,我试图将该数据写入 csv 文件在 wwwroot 中调用 FutureFills.csv,然后下载该文件。这是控制器

[HttpGet]
[Route("~/FutureFills")]
[Produces("text/csv")]
public IActionResult ExportFile()
{

    var futurefills = _context.Prescriptions
      .Where(f => f.FolderStatusId == 9)
      .Where(d => d.DeliveryDate == DateTime.Today.AddDays(1))
      .ToList();

    System.IO.MemoryStream stream = new System.IO.MemoryStream();
    System.IO.StreamWriter write = new System.IO.StreamWriter(Stream);

    CsvFileDescription file = new CsvFileDescription 
    { 
        SeparatorChar = ',', FirstLineHasColumnNames = true 
    };

    return File(System.Text.Encoding.ASCII.GetBytes(futurefills.ToString()), "text/csv", "FutureFills.csv");
}

所以我在页面上有一个按钮调用此操作并下载一个 csv 文件,它下载并似乎工作但是当我打开 csv 文件时它不是我需要的数据,我希望得到Prescriptions table 来自我的数据库,但是我在 csv 文件

中得到了这个

我做错了什么,它没有将正确的数据写入文件?

您从未执行过查询。在futureFills

末尾加一个.ToList()
    var futurefills = _context.Prescriptions
      .Where(f => f.FolderStatusId == 9)
      .Where(d => d.DeliveryDate == DateTime.Today.AddDays(1)).ToList();

看来你只是在简单地输出futurefills.ToString(),也就是输出它持有的对象类型的名字而已

您确定 futurefills.ToString() 具有您期望的值吗?尝试调试您的应用程序,并在 Linq 查询后检查 futurefills 的值。

您需要遍历 futureFills 对象中的每个元素,这些元素包含在项目中。所以你需要写一个类似这样的结构:

var output = new StringBuilder();
foreach (var row in futurefills)
{
    output.AppendLine(row.Field1 + ", " + row.Field2);
}

然后你就可以继续output.ToString()

像这样:

return File(System.Text.Encoding.ASCII.GetBytes(output.ToString()), "text/csv", "FutureFills.csv");