I have a list like this :
List<ValueModel> list = new List<ValueModel>();
for(var i = 1; i <= 3;i++)
{
lista.Add(new ValueModel
{
Name = string.Format("Header {0}",i),
Value = string.Format("Value of Header {0}", i),
});
}
How do i use CSVHelper to write to csv so the output would be something like this(using the property's value) :
Header1,Header2,Header3
Value of Header1,Value of Header2,Value of Header3
I'll assume you are referring to this CsvHelper library here. If not, please clarify this in your question.
To achieve your output you can use something like this:
var data = new List<ValueModel>(0);
data.Add(new ValueModel { Name= "Stack", Surname= "Overflow", Users = "1M" });
data.Add(new ValueModel { Name= "Stack", Surname= "ServerFault", Users = "0.5M" });
using (StreamWriter sw = new StreamWriter(@"C:\Temp\out.csv"))
using (CsvWriter cw = new CsvWriter(sw))
{
cw.WriteHeader<ValueModel>();
foreach (ValueModel rec in data)
{
cw.WriteRecord<ValueModel>(rec);
}
}
The output will look something like this:
Name,Surname,Users
Stack,Overflow,1M
Stack,ServerFault,0.5M
I'd suggest to utilise property definition attributes described here so you can keep your naming convention in c# and easily add user friendly property names.
UPDATE (as per initial comment):
Below code will generate the wanted output.
var data = new List<ValueModel>(0);
using (StreamWriter sw = new StreamWriter(@"C:\Temp\out.csv"))
using (CsvWriter cw = new CsvWriter(sw))
{
cw.WriteRecord(data.Select(x => x.Name).ToArray());
cw.WriteRecord(data.Select(x => x.Value).ToArray());
}
Of course, each case is unique but I'd suggest looking into using dictionaries if your object is { Name; Value }.