'csvHelper sort dynamic data

Can anyone help me to understand how we can sort data in csvHelper before we write to string object? I am trying with Key but it is not working in case when there is dynamic data.

        string source = "James,Anthony,Mary\n,10,\n21,,212";



        using var reader = new StringReader(source);
        using var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
        var records =  csvReader.GetRecords<dynamic>().ToList();


        var orderedRecords = records.OrderBy(r => r.Key);

        using (var writer = new StringWriter())
        using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
        {
            csv.WriteRecords(orderedRecords);

            Console.WriteLine( writer.ToString());
        }

I am getting following exception.

CsvHelper.WriterException: 'An unexpected error occurred.
  IWriter state:
  Row: 1
  Index: 0
  HeaderRecord:
  1
  '

The expected output I am looking for is,

   Anthony,James,Mary //--> Header Sorted Alphabetically
   ,10,               //--> First Row Sorted as per Header
   21,,212            //--> Second Row Sorted As Per Header

I appreciate your help on this.



Solution 1:[1]

After updating the question. You need to use James, Antony or Mary instead of 'Key' to sort data and the code works:

var source = $"James,Anthony,Mary\n,10,\n21,,212";

using var reader = new StringReader(source);
using var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
var records = csvReader.GetRecords<dynamic>().ToList();

var orderedRecords = records.OrderBy(r => r.James);

using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(orderedRecords);

    Console.WriteLine(writer.ToString());
}

P.S. It's very dangerous when you use dynamic to read data, usually we use stable data table.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1