如何解决写入时 csvHelper Sort 字段
我正在尝试使用 CsvHelper 库将 CSV 流写入文件。一切都很好,但是我遇到了两件事
static void Main(string[] args)
{
var records = new List<MyTest>
{
new MyTest { Id = 1,Name = "John",Extra = "hello" },new MyTest { Id = 2,Name = "Jack",Extra = "hi" },};
using (var writer = new StreamWriter("C:\\Users\\machina\\AppData\\Local\\Temp\\file.csv"))
using (var csv = new CsvWriter(writer,CultureInfo.InvariantCulture))
{
csv.Context.RegisterClassMap<TestMap<MyTest>>();
csv.WriteRecords<MyTest>(records);
}
}
}
public interface IData
{
public int Id { get; set; }
public string Name { get; set; }
}
public abstract class AbTest : IData
{
public abstract int Id { get; set; }
public abstract string Name { get; set; }
public abstract string Extra { get; set; }
}
public class MyTest : AbTest
{
public override int Id { get; set; }
public override string Name { get; set; }
public override string Extra { get; set; }
}
public class TestMap<T> : ClassMap<MyTest>
{
public TestMap()
{
AutoMap(CultureInfo.InvariantCulture);
}
}
上述工作是因为我已经准备了数据 records
但是我想要实现的是将 Extra
列值动态添加到我现有的没有它的 csv 数据流中。
我还在 csvconfiguration 下看到了 DynamicPropertySort
并想检查它是否可以在写入之前以任何方式对我的 CSV 流中的字段进行排序,即使它一次写入一条记录?
我是一名新手开发者,所以如果有更好的方法来实现这一点,请告诉我。
解决方法
-
动态添加列的最简单方法可能是手动写出每一行。
-
DynamicPropertySort
仅用于对动态对象的列进行排序。您可以使用 linqOrderBy()
方法对特定字段进行排序。
static void Main(string[] args)
{
var records = new List<MyTest>
{
new MyTest { Id = 1,Name = "John",Extra = "hello" },new MyTest { Id = 2,Name = "Jack",Extra = "hi" },};
var extraField1 = 10;
var extraField2 = "Testing";
using (var writer = new StreamWriter("C:\\Users\\machina\\AppData\\Local\\Temp\\file.csv"))
using (var csv = new CsvWriter(writer,CultureInfo.InvariantCulture))
{
csv.Context.RegisterClassMap<TestMap>();
var orderedRecords = records.OrderBy(r => r.Name);
csv.WriteHeader<MyTest>();
csv.WriteField("ExtraField1");
csv.WriteField("ExtraField2");
csv.NextRecord();
foreach (var record in orderedRecords)
{
csv.WriteRecord(record);
csv.WriteField(extraField1);
csv.WriteField(extraField2);
csv.NextRecord();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。