这段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存在
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐