You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CsvHelper解决横向存储价格CSV的字段映射转换问题

你需要的是宽表转长表的实现,用CsvHelper可以按如下方式实现:

第一步:定义输出结果的实体类

public class ProductPrice
{
    public string ArticleNumber { get; set; }
    public string Shop { get; set; }
    public decimal Price { get; set; }
}

第二步:安装CsvHelper并编写转换逻辑

先通过NuGet安装CsvHelper包,再使用以下代码完成读取转换:

using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Collections.Generic;

// 初始化Csv配置,适配你的分号分隔格式
var csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Delimiter = ";",
    HasHeaderRecord = true
};

var outputList = new List<ProductPrice>();

// 读取并转换CSV
using (var streamReader = new StreamReader("你的CSV文件本地路径.csv"))
using (var csvReader = new CsvReader(streamReader, csvConfig))
{
    // 读取表头
    csvReader.Read();
    csvReader.ReadHeader();
    // 筛选出所有门店列
    var allShopColumns = csvReader.HeaderRecord.Where(col => col.StartsWith("Shop")).ToList();

    // 遍历每一行商品数据
    while (csvReader.Read())
    {
        var currentArticleNo = csvReader.GetField<string>("ArticleNumber");
        // 遍历所有门店生成对应记录
        foreach (var shopName in allShopColumns)
        {
            outputList.Add(new ProductPrice
            {
                ArticleNumber = currentArticleNo,
                Shop = shopName,
                Price = csvReader.GetField<decimal>(shopName)
            });
        }
    }
}

最终outputList中存储的就是你需要的三字段结构数据,可直接用于后续业务处理。该方案采用动态读取门店列的逻辑,兼容性更好,后续新增/减少门店字段无需修改代码即可自动适配。

内容的提问来源于stack exchange,提问作者Jimmy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:45:04