.net LINQtoCSV(或其他LIB):如何导出(到CSV文件)类中动态数量的字段
我认为LINQtoCSV是保存和加载CSV文件的好库。 然而,我有一个问题,并张贴在上面的链接,但似乎作者没有升级库,也没有回答我的问题 我的问题是: 如何使用LINQtoCSV(或其他库)导出类中动态数量的字段.net LINQtoCSV(或其他LIB):如何导出(到CSV文件)类中动态数量的字段,.net,linq,reflection,csv,.net,Linq,Reflection,Csv,我认为LINQtoCSV是保存和加载CSV文件的好库。 然而,我有一个问题,并张贴在上面的链接,但似乎作者没有升级库,也没有回答我的问题 我的问题是: 如何使用LINQtoCSV(或其他库)导出类中动态数量的字段 public class DynamicNumberFieldsClass { [CsvColumn(FieldIndex = 1, Name = "Full Name")] public string FullName { get; set; } // [
public class DynamicNumberFieldsClass
{
[CsvColumn(FieldIndex = 1, Name = "Full Name")]
public string FullName { get; set; }
// [CsvColumn(FieldIndex = 2, Name = "Years")]
// I don't know how to write the CsvColumn attribute
// because the number of years is dynamic.
// If the user sets to 10 years, I want to export the CSV files
// with 11 columns (FullName and 10 years: Year1, Year2,....
public int[] Years { get; set; }
}
预期的输出CSV文件:
FullName Year1 Year2 Year3...
Peter 11 12 13
Bryan 21 22 23
如果我必须使用反射,对我来说没关系。但是如何使用带有反射的LINQtoCSV库来满足我的需求呢
谢谢
彼得
对于大型阵列,请使用StringBuilder来提高性能。我可以告诉您如何使用我维护的库来实现这一点。CsvHelper在NuGet上提供
var streamWriter = //...Create your writer
var csvWriter = new CsvWriter( streamWriter );
// Write the header row
csvWriter.WriteField( "Name" );
foreach( var year in myList.First().Years )
{
csvWriter.WriteField( "Year" + year );
}
csvWriter.NextRecord();
// Write the rest of the rows.
foreach( var item in myList )
{
csvWriter.WriteField( item.FullName );
foreach( var year in item.Years )
{
csvWriter.WriteField( year );
}
csvWriter.NextRecord();
}
显然,您需要使用
using
块并检查空值和所有这些内容。谢谢您的回复。但我担心你可能误解了我的问题。我希望字段的数量是动态的,而不是在特定字段(“年”)内。
var streamWriter = //...Create your writer
var csvWriter = new CsvWriter( streamWriter );
// Write the header row
csvWriter.WriteField( "Name" );
foreach( var year in myList.First().Years )
{
csvWriter.WriteField( "Year" + year );
}
csvWriter.NextRecord();
// Write the rest of the rows.
foreach( var item in myList )
{
csvWriter.WriteField( item.FullName );
foreach( var year in item.Years )
{
csvWriter.WriteField( year );
}
csvWriter.NextRecord();
}