将两个项目组合成一个列表

本文关键字:一个 列表 组合 项目 两个 项目组 | 更新日期: 2023-09-27 17:58:48

我需要一种方法来减少列表,或计算"总计"。我有一个类,让我们称之为Prod。Prod包含4个值。一个是产品名称、id、序列号和数量。基本上我有一个产品,但有两个不同的序列号。因此,当我从查询中取回数据时,我有两个项目,我想将它们视为一个项目。我该如何使用LINQ或其他东西呢(我无法预测它们。还有更多的类成员,这需要一段时间,而且看起来很糟糕)。我希望能够获得这两个实例,并组合它们的序列号(而不仅仅是Serail1-serial 2),还可以一起计算数量。

将两个项目组合成一个列表

我认为您想要的是Linq分组函数(请参阅GroupBy-Simple 3)。这应该会给你一个序列号列表及其数量计数:

public void Linq42()
{
    List<Prod> products = GetProductList();
    var serialCombined =
        from p in products
        group p by p.SerialNumber into g
        select new { SerialNumber = g.Key, Total = g.Count() };
}

使用join运算符并将它们放置在Tuple中。然后,您可以对元组调用更多的LINQ或对它们进行迭代。

var combinedProducts = 
    from product1 in products1 
    join product2 in products2 on product1.serial equals product2.serial
    select Tuple.Create(product1, product2);
// Use LINQ to calculate a total    
combinedProducts.Sum(combined => combined.Item1.count * combined.Item2.price);
// Or use foreach to iterate over the tuples  
foreach (var combined in combinedProducts) {
    Console.WriteLine("{0} and {1}", combined.Item1.name, combined.Item2.name);
}