ASP.NET Core 5生成装箱编码时重复包装编号问题求助
解决重复包装编号显示问题
问题核心是输入的packsNo包含重复值,但原代码未做去重处理,导致生成的编码中重复编号多次出现。只需在处理前对包装编号集合去重即可解决。
修改后的代码如下:
protected string GeneratePackingCode(IEnumerable<int> packsNo, IEnumerable<string> companies = null) { if (!packsNo.Any()) return string.Empty; var packingCode = "Pack:"; // 先去重再排序,确保同一编号只处理一次 var packs = packsNo .Distinct() .OrderBy(e => e); var count = packs.Count(); int first = packs.First(), prev = first, curr = first; for (int i = 1; i <= count; i++) { if (i < count) curr = packs.ElementAt(i); if (prev + 1 != curr) { if (first != prev) packingCode += $"{first}:{prev},"; else packingCode += $"{first},"; first = curr; } prev = curr; } packingCode = packingCode.TrimEnd(','); if (companies != null && companies.Any()) { var companiesName = companies .Distinct() .OrderBy(e => e) .ToList(); packingCode += $" ({string.Join(',', companiesName)})"; } return packingCode; }
关键修改点
- 在包装编号处理链中添加
.Distinct():确保集合中每个编号唯一,后续排序和区间合并逻辑只会处理一次相同编号。 - 原代码中
companies部分已使用.Distinct(),保持该逻辑不变即可。
例如输入重复的[4,4,2,3,4],去重排序后变为[2,3,4],生成的编码会是Pack:2:4,不会出现重复的4。
内容的提问来源于stack exchange,提问作者Maryam Hossini
相关产品推荐
相关产品推荐

