2011-06-10 115 views
0

我需要一種方法來減少列表或計算「總計」。我有一堂課,讓我們稱之爲產品。 Prod包含4個值。一個是產品的名稱,ID,序列號和數量。基本上我有一個產品,但有兩個不同的序列號。所以,當我從我的查詢中得到我的數據時,我有兩個項目,我想將它們視爲單個項目。我該如何去使用LINQ或其他的東西(我不能對他們進行預告,還有更多的類成員,這需要一段時間,再加上看起來很糟糕)。我希望能夠使用2個實例併合並其序列號(而不是僅添加Serail1 - Serial 2)並一起計算數量。在列表中組合兩個項目

+0

你可以舉個例子嗎?列表樣本的數據?未標記答案 – Kiquenet 2016-09-29 07:12:57

回答

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); 
} 
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() }; 
}