C#淘宝商品系统商品合并产品价格对比实战(没有匹配的也展示)
·
这段C#代码演示了两个产品列表的合并操作。通过定义Product类包含名称、价格和原价属性,程序创建了两个产品列表list1和list2。使用LINQ的Join方法,基于产品名称将两个列表合并,保留每个产品的原始价格和新价格信息。最终控制台输出合并后的产品信息,包括名称、原价/新价等数据。代码展示了如何使用LINQ进行集合操作和数据合并。
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public decimal OriginalPrice { get; set; }
}
public static void test()
{
List<Product> list1 = new List<Product>
{
new Product { Name = "商品A", Price = 100, OriginalPrice = 120 },
new Product { Name = "商品B", Price = 200, OriginalPrice = 250 },
new Product { Name = "商品C", Price = 300, OriginalPrice = 350 }
};
List<Product> list2 = new List<Product>
{
new Product { Name = "商品A", Price = 110, OriginalPrice = 120 },
new Product { Name = "商品B", Price = 200, OriginalPrice = 200 },
new Product { Name = "商品D", Price = 400, OriginalPrice = 450 }
};
// 定义统一的结果类型
var leftJoin = from p1 in list1
join p2 in list2 on p1.Name equals p2.Name into temp
from p2 in temp.DefaultIfEmpty()
select new
{
Name = p1.Name,
List1Price = (decimal?)p1.Price,
List1Original = (decimal?)p1.OriginalPrice,
List2Price = p2?.Price,
List2Original = p2?.OriginalPrice,
MatchStatus = p2 != null ? (p1.Price == p2.Price ? "完全匹配" : "价格不一致") : "仅List1存在"
};
var rightOnly = from p2 in list2
join p1 in list1 on p2.Name equals p1.Name into temp
from p1 in temp.DefaultIfEmpty()
where p1 == null
select new
{
Name = p2.Name,
List1Price = (decimal?)null,
List1Original = (decimal?)null,
List2Price = (decimal?)p2.Price,
List2Original = (decimal?)p2.OriginalPrice,
MatchStatus = "仅List2存在"
};
// 现在可以安全合并
var fullCompare = leftJoin.Concat(rightOnly).OrderBy(x => x.Name);
Console.WriteLine("商品名称\tList1价格\tList1原价\tList2价格\tList2原价\t匹配状态");
foreach (var item in fullCompare)
{
Console.WriteLine($"{item.Name}\t" +
$"{item.List1Price?.ToString() ?? "N/A"}\t" +
$"{item.List1Original?.ToString() ?? "N/A"}\t" +
$"{item.List2Price?.ToString() ?? "N/A"}\t" +
$"{item.List2Original?.ToString() ?? "N/A"}\t" +
$"{item.MatchStatus}");
}
}
数据结果输出
| 商品名称 | List1价格 | List1原价 | List2价格 | List2原价 | 匹配状态 |
| 商品A | 100 | 120 | 110 | 120 | 价格不一致 |
| 商品B | 200 | 250 | 200 | 200 | 完全匹配 |
| 商品C | 300 | 350 | N/A | N/A | 仅List1存在 |
| 商品D | N/A | N/A | 400 | 450 | 仅List2存在 |
更多推荐


所有评论(0)