C#csvhelper编写复杂数据

时间:2018-09-27 13:37:58

标签: c# csvhelper

我具有以下对象结构,并尝试使用csvhelper写入csv。但是没有添加文件名列。

public class ClusterData
{
    public IEnumerable<string> FileName { get; set; }

    public int? ClusterNumber { get; set; }

    public string TopTerm { get; set; }
}


    using (var writer = new StreamWriter(@"C:\Clean.csv"))
    {
        var csv = new CsvWriter(writer);
        csv.WriteHeader<ClusterData>();
        foreach (var item in dataToCsv)
        {
            foreach (var filename in item.FileName)
            {
                csv.WriteField(filename);
                csv.WriteField(item.ClusterNumber);
                csv.WriteField(item.TopTerm);
                csv.NextRecord();
            }
        }
        writer.Flush();
    }

该如何实现?我希望对文件名中的每个项目重复一次外循环,并重复一次内循环。

谢谢

1 个答案:

答案 0 :(得分:1)

提取所需的数据,然后使用编写器将其发送到文件

using (var writer = new StreamWriter(@"C:\Clean.csv")) {
    var data = new List<ClusterData>();

    //...assuming data is poulated

    var dataToCsv = data.SelectMany(item => item.FileName.Select(filename => new {
        FileName = filename,
        ClusterNumber = item.ClusterNumber,
        TopTerm = item.TopTerm
    }));

    var csv = new CsvWriter(writer);
    csv.WriteRecords(dataToCsv);
}

linq查询用于为数据中的每个文件名构造所需的对象格式。

然后将数据像通常使用CsvWriter

一样转换为CSV