CsvHelper - 拆分输出文件

CsvHelper - Split output files

我正在使用 Csv Helper 写出包含数百万行的 Linq 查询。例如,我想将输出分成 100 万行。我可以这样做还是应该使用其他类型的书写方法?

这是我的代码:

var _path = UniversalVariables.outputCsvFiles + "entire_output.csv"; 

var pvQuery = from car in Cars 
              select car;


if (!Directory.Exists(UniversalVariables.outputCsvFiles))
{
    Directory.CreateDirectory(UniversalVariables.outputCsvFiles);
}

using (var sw = new StreamWriter(_path))
using (var csv = new CsvWriter(sw))
{
    csv.Configuration.Delimiter = UniversalVariables.csvDelimiter;
    csv.Configuration.HasHeaderRecord = true;

    csv.WriteHeader<Car>();
    csv.NextRecord();
    csv.WriteRecords(pvQuery);

    sw.Flush();
}

您可以使用 Linq 将集合拆分为子集合(大小为 n 的块)。例如

pvQuery.Select((x,index)=>new {Value=x,Index=index})
              .GroupBy(x=>(int)(x.Index/numberOfItemsPerGroup))
              .Select(x=>x.Select(c=>c.Value));

使其成为扩展方法

static class Extensions
{
    public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int numberOfItemsPerGroup)
    {
        return source.Select((x,index)=>new {Value=x,Index=index})
              .GroupBy(x=>(int)(x.Index/numberOfItemsPerGroup))
              .Select(x=>x.Select(c=>c.Value));

    }
}

客户代码

SourceCollection.Split(numberOfItemsPerGroup);