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

时间:2019-05-30 14:33:12

标签: c# .net csv .net-core csvhelper

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

很抱歉,如果此问题已在其他地方得到解答,但同时搜索了github问题和stackoverflow。

2 个答案:

答案 0 :(得分:0)

这个问题让我有些困惑,因为忽略是全部还是全部。您不能逐行忽略字段。您要么包含该字段,要么不包含。如果说所有记录的特定成员变量的值均为空或空,则可以忽略该字段。

<Border x:Name="westDoor" ... Visibility="{x:Bind HasWestDoor, Mode=OneWay,
     Converter={StaticResource ResourceKey=BoolToVis}}" />

答案 1 :(得分:0)

对我来说,答案是将要忽略的字段/列的集合传递到映射器中。这涉及到我检查所有行上是否有空值的数据收集,如果是这样,那么我可以完全省略该列。然后像这样将这个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"));

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

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