Переместите указанную выше логику в метод, называемый CreateReportPdf()
, чтобы вернуть поток, затем, используя библиотеку, подобную DotnetZip , вы можете сделать что-то вроде этого:
using (ZipFile zip = new ZipFile())
{
foreach (var smdId in reports)
{
string fileName = $"smdReport{smdId}_{DateTime.Now.ToString()}";
using (var report = CreateReportPDF(smdId))
{
// convert stream to archive
zip.AddEntry($"{fileName}", report.ToArray());
}
}
zip.Save("YourZip.zip");
}
Ваш CreateReportPDF
должен вернуть MemoryStream
var ms = new MemoryStream();
stream.CopyTo(ms);
ms.Position = 0;
return ms;
Обратите внимание, что я использовал вашу логику filename
для генерации имени файла в zip-архиве