合并列表中的两个项目

时间:2011-06-10 16:19:17

标签: c# linq list

我需要一种方法来减少列表,或计算“总计”。我有一个班级,我们称之为Prod。 Prod包含4个值。一个是产品名称,ID,序列号和数量。基本上我有一个产品,但有两个不同的序列号。因此,当我从查询中获取数据时,我有2个项目,我想将其视为单个项目。我怎样才能使用LINQ或其他东西(我无法预测它们。还有更多的类成员,这需要一段时间再加上看起来很糟糕)。我希望能够获取2个实例并组合它们的序列号(不仅仅添加Serail1 - Serial 2)并同时计算数量。

2 个答案:

答案 0 :(得分:1)

我认为你想要的是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() };
}

答案 1 :(得分:0)

使用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);
}