在 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");
在 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");