CSVHELPER 当值为 null 或空时有条件地忽略写入字段

P0D*_*3R5 1 .net c# csv csvhelper .net-core

我目前正在使用 csvhelper 的 csvwriter 将扁平化的 DTO 对象写入 CSV。如果某些字段尚未初始化或在映射器中为空,是否有办法有条件地忽略它们?我看到忽略标志采用 boolean ,但是我如何访问有问题的字段来测试这一点。

如果这个问题在其他地方得到了解答,但我已经搜索了 github 问题以及 stackoverflow,我们深表歉意。

P0D*_*3R5 5

对我来说,答案是传递一组要忽略的字段/列到映射器中。这涉及我检查数据集合中所有行上是否有任何空值,如果是这样,那么我可以完全省略该列。然后我将这个 requiredFields 集合传递到映射器中,如下所示。

public sealed class ApplicationCsvWriterMap : ClassMap<ApplicationDto>
{
    public ApplicationCsvWriterMap(List<string> requiredFields)
    {
        Map(m => m.Id).Index(1).Name("AppId").Ignore(!requiredFields.Contains("id"));
        Map(m => m.Status.Text).Index(2).Name("Status").Ignore(!requiredFields.Contains("status"));
        Map(m => m.ApplicationTimestamp).Index(3).Ignore(!requiredFields.Contains("applicationTimestamp"));
        Map(m => m.LastModified).Index(4).Ignore(!requiredFields.Contains("lastModified"));
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样设置映射器,像这样传入 requiredFields 集合

  else if (results.Data is List<Application> applications)
            {
                csvWriter.Configuration.RegisterClassMap(new ApplicationCsvWriterMap(results.RequiredFields));
                csvWriter.WriteRecords(_dtoMapper.MapApplications(applications));
            }
Run Code Online (Sandbox Code Playgroud)