使用 CsvHelper,如果第一列的值等于 0,如何映射到第二列

Wel*_*ing 4 c# csv asp.net asp.net-mvc csvhelper

如果第一个字段小于 0,有没有办法映射到第二个字段?

例如,如果您要映射带有列foo和的 csv 文件bar

Map(m => m.Price).Name("foo");
Run Code Online (Sandbox Code Playgroud)

如果该列foo等于 0,我们是否可以映射Price到该bar列的值。

小智 5

您必须手动转换列,如下所示。

Map(x => x.Price)
    .Name("foo")
    .ConvertUsing(row =>
    {
        var fooValue = row.GetField<decimal>("foo");

        if (fooValue == 0m)
        {
            return row.GetField<decimal>("bar");
        }
        return fooValue;
    });
Run Code Online (Sandbox Code Playgroud)

也就是说,我认为您不应该使用 CsvHelper 来进行条件映射。理想情况下,您应该有一个 CSV 模型和另一个要映射到的模型的映射。然后使用将您的 CSV 模型映射到其他模型的代码。