我从通用列表上的 API 获得响应
IEnumerable<myClass> objClass
.
我在这里尝试使用 StreamWriter 将列表导出到 CSV 文件
var serviceResponse = await services.GetProfileRepositoryAsync(requestDto, token);
if(requestDto.IsExportable)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
**writer.Write((serviceResponse.dto.NewSoftwareFileDto));**
writer.Flush();
stream.Position = 0;
return File(stream, "text/csv", "filesname.csv");
}
自 serviceResponse.dto.NewSoftwareFileDto
返回列表 writer.Write
不是拧内容。一旦我将 Objectresult 与 writer.Write()
一起使用方法,它在早些时候工作。现在我想不起来了。
我想避免遍历列表和写入数据。
最佳答案
您不能将 DTO 列表直接发送到 MemoryStream
使用 StreamWriter.Write()
,因为 StreamWriter.Write()
只接受 char
, char[]
或 string
作为第一个参数。由于您想避免使用循环(for
或 foreach
),您可以使用 LINQ 创建一个 List<string>
从现有的 DTO 列表中提取逗号分隔值,然后将其内容写入流中:
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
// create list of strings from DTO list
List<string> items = serviceResponse.dto.NewSoftwareFileDto.Select(x =>
string.Join(",", x.Property1, x.Property2, ...)).ToList();
// insert newline between every lines (i.e. list indexes)
string combined = string.Join(Environment.NewLine, items);
// write combined strings to StreamWriter
writer.Write(combined);
writer.Flush();
stream.Position = 0;
return File(stream, "text/csv", "filesname.csv");
请注意 Property1
, Property2
etc. 表示 DTO 对象列表中的属性名称,具体取决于定义顺序。 Select
中使用的属性名称必须在 NewSoftwareFileDto
内可用.
关于c# - 使用服务器端 webapi 和列表导出到 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55237065/