我从通用列表上的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()
方法一起使用,它就可以更早地工作了。现在我无法回忆了。
我想避免遍历列表并写入数据。
答案 0 :(得分:0)
您无法使用MemoryStream
将DTO列表直接发送到StreamWriter.Write()
,因为StreamWriter.Write()
仅接受char
,char[]
或{{1 }}作为第一个参数。由于要避免使用循环(string
或for
),因此可以使用LINQ从DTO的现有列表中创建一个foreach
作为逗号分隔值,然后将其内容写入流:
List<string>
请注意,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
等表示DTO对象列表内的属性名称,具体取决于定义的顺序。 Property2
中使用的属性名称必须在Select
内部可用。