using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using zero.Core.Entities; namespace zero.Core.Utils { public abstract class TableExport : ITableExport where TEntity : ZeroEntity { public virtual async Task Export(TableFormat format = TableFormat.Excel) { ITableBuilder builder = new TableBuilder(format); Build(builder); IAsyncEnumerable items = Load(); MemoryStream stream = await builder.ToStream(items); return stream; } protected virtual async IAsyncEnumerable Load() { await Task.Delay(0); yield break; } protected virtual void Build(ITableBuilder builder) { builder.Column("Id").For(c => c.Id).Size(40); builder.Column("Name").For(c => c.Name).Size(40); } } public interface ITableExport where TEntity : ZeroEntity { Task Export(TableFormat format = TableFormat.Excel); } }