public static string ExportCsv()

in src/SimplCommerce.Infrastructure/Helpers/CsvConverter.cs [41:110]


        public static string ExportCsv<T>(IList<T> data, bool includeHeader = true, string csvDelimiter = ",")
        {
            var type = data.GetType();
            Type itemType;

            if (type.GetGenericArguments().Length > 0)
            {
                itemType = type.GetGenericArguments()[0];
            }
            else
            {
                itemType = type.GetElementType();
            }

            using (var stringWriter = new StringWriter())
            {
                if (includeHeader)
                {
                    stringWriter.WriteLine(
                        string.Join<string>(
                            csvDelimiter, itemType.GetProperties().Select(x => x.Name)
                        )
                    );
                }

                foreach (var obj in data)
                {
                    var vals = obj.GetType().GetProperties().Select(pi => new
                    {
                        Value = pi.GetValue(obj, null)
                    }
                    );

                    string line = string.Empty;
                    foreach (var val in vals)
                    {
                        if (val.Value != null)
                        {
                            var escapeVal = val.Value.ToString();
                            // Check if the value contans a comma and place it in quotes if so
                            if (escapeVal.Contains(",", StringComparison.OrdinalIgnoreCase))
                            {
                                escapeVal = string.Concat("\"", escapeVal, "\"");
                            }

                            // Replace any \r or \n special characters from a new line with a space
                            if (escapeVal.Contains("\r", StringComparison.OrdinalIgnoreCase))
                            {
                                escapeVal = escapeVal.Replace("\r", " ", StringComparison.OrdinalIgnoreCase);
                            }

                            if (escapeVal.Contains("\n", StringComparison.OrdinalIgnoreCase))
                            {
                                escapeVal = escapeVal.Replace("\n", " ", StringComparison.OrdinalIgnoreCase);
                            }

                            line = string.Concat(line, escapeVal, csvDelimiter);
                        }
                        else
                        {
                            line = string.Concat(line, string.Empty, csvDelimiter);
                        }
                    }

                    stringWriter.WriteLine(line.TrimEnd(csvDelimiter.ToCharArray()));
                }

                return stringWriter.ToString();
            }
        }