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

C#比对两个CSV导入的列表 筛选条形码匹配的共有条目

C# CSV条码匹配实现方案

你之前的匹配方案失效,大概率是两个原因:一是没有对条码做格式标准化,两边条码存在空格、特殊字符、大小写差异导致匹配不上;二是嵌套循环遍历的写法逻辑容易出错、性能差。可以按下面的步骤实现:

1 前置准备

首先确认商品类的字段映射和CSV表头完全匹配,避免读取阶段就丢了条码数据。如果CSV表头是小写的description/barcode/price,可以给属性加CsvHelper的映射特性,或者直接把属性名改成和表头一致。

using CsvHelper;
using CsvHelper.Configuration.Attributes;
using System.Globalization;

// 通用商品模型
public class Product
{
    [Name("description")]
    public string Description { get; set; }
    [Name("barcode")]
    public string Barcode { get; set; }
    [Name("price")]
    public decimal Price { get; set; }
}

2 读取两份CSV文件

分别读取每日更新文件和静态基准文件的数据:

// 读取每日更新CSV
List<Product> dailyProducts;
using (var dailyReader = new StreamReader(@"C:\path\to\Prices - Sheet1.csv"))
using (var dailyCsv = new CsvReader(dailyReader, CultureInfo.InvariantCulture))
{
    dailyProducts = dailyCsv.GetRecords<Product>().ToList();
}

// 读取静态基准CSV
List<Product> staticProducts;
using (var staticReader = new StreamReader(@"C:\path\to\StaticPrices.csv"))
using (var staticCsv = new CsvReader(staticReader, CultureInfo.InvariantCulture))
{
    staticProducts = staticCsv.GetRecords<Product>().ToList();
}

3 条码标准化与匹配

不要用嵌套foreach逐行比对,先把静态文件的条码做标准化处理后存入HashSet,匹配的时间复杂度可以降到O(1),整体效率远高于嵌套循环。

// 条码标准化:处理前后空格、无关分隔符、大小写差异等常见匹配问题
string NormalizeBarcode(string rawBarcode)
{
    if (string.IsNullOrWhiteSpace(rawBarcode)) return string.Empty;
    return rawBarcode.Trim()
        .Replace(" ", "")
        .Replace("-", "")
        .ToLowerInvariant();
}

// 构建静态条码的哈希集合
HashSet<string> staticBarcodeSet = new HashSet<string>(
    staticProducts.Select(p => NormalizeBarcode(p.Barcode))
);

// 生成带匹配标记的结果
var matchedResult = dailyProducts.Select(product => new
{
    product.Description,
    product.Barcode,
    product.Price,
    IsMatched = staticBarcodeSet.Contains(NormalizeBarcode(product.Barcode))
}).ToList();

额外说明

  • 如果你需要同时获取静态文件中对应条码的商品数据(比如做价格对比),可以把HashSet换成Dictionary<string, Product>,key存标准化后的条码,value存对应的静态商品对象,匹配时直接取值即可,不需要二次遍历。
  • 如果静态文件存在重复条码,先按业务规则做去重再构建哈希集合,避免匹配逻辑异常。
  • 若读取时出现字段为空的问题,先检查CSV文件的编码、表头行是否和模型属性映射一致,必要时可以在CsvReader配置里指定是否跳过表头注释、空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.06 16:15:42