Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net LINQtoCSV(或其他LIB):如何导出(到CSV文件)类中动态数量的字段_.net_Linq_Reflection_Csv - Fatal编程技术网

.net LINQtoCSV(或其他LIB):如何导出(到CSV文件)类中动态数量的字段

.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; } // [

我认为LINQtoCSV是保存和加载CSV文件的好库。

然而,我有一个问题,并张贴在上面的链接,但似乎作者没有升级库,也没有回答我的问题

我的问题是:

如何使用LINQtoCSV(或其他库)导出类中动态数量的字段

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