using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Threading.Tasks; namespace IOB_UT_NEXT { public class DataExport { /// /// Effettua salvataggio in file di un generico oggetto in formato CSV /// /// /// /// /// Indica se scrivere header ad inizio CSV /// Separatore da impiegare (default ";") /// public static bool SaveToCsv(List reportData, string path, bool writeHeader, char separator = ';') { bool answ = false; var lines = new List(); try { IEnumerable props = TypeDescriptor.GetProperties(typeof(T)).OfType(); var elencoValori = props.ToList(); var header = string.Join($"{separator}", props.ToList().Select(x => !string.IsNullOrEmpty(x.Description) ? x.Description : x.Name)); var fieldList = string.Join($"{separator}", props.ToList().Select(x => x.Name)); if (writeHeader) { lines.Add(header); } var valueLines = reportData.Select(row => string.Join($"{separator}", fieldList.Split(separator).Select(a => row.GetType().GetProperty(a).GetValue(row, null)))); //var valueLines = reportData.Select(row => string.Join(";", header.Split(';').Select(a => row.GetType().GetProperty(a).GetValue(row, null)))); lines.AddRange(valueLines); File.WriteAllLines(path, lines.ToArray()); answ = true; } catch { } return answ; } } }