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();
}
}