1

所以我有一类产品:

class Product{
    public int id;
    public int price;
    public string product_name;
}

var BoughtProductList = new List<Product>();
BoughtProductList .Add(new Product() { id = 1, price = 3 product_name = "orange" });
BoughtProductList .Add(new Product() { id = 2, price = 2 product_name = "apple" });
BoughtProductList .Add(new Product() { id = 2, price = 2 product_name = "apple" });
BoughtProductList .Add(new Product() { id = 3, price = 3 product_name = "banana" });

现在我想把它放在一张桌子上,这样它就会向我展示所有购买的产品,但我不想两次看到苹果产品。我如何在 linq 中查看该列表而不创建该类的新实例并添加相同的产品 ID 以查看我在该列表中出售该苹果的金额。

4

3 回答 3

5
from produce in BoughtProductList
group produce.price by new {produce.id, produce.product_name} into grp
select new{grp.id, grp.product_name, TotalPrice = grp.Sum()};
于 2012-08-21T13:43:37.680 回答
1

您要做的是GroupBy对产品的id属性执行 a 。完成此操作后,您可以从每个组中添加idandproduct_name并知道它将是不同的。您还可以Sum计算每个组的价格(或将数量乘以价格)以获得销售该产品所赚取的总金额。

于 2012-08-21T13:39:06.700 回答
1
var newBoughtProductList = new List<Product>();//create new list

for (int i = 0; i < BoughtProductList.Count; i++)//search old list
{
    Product currentProduct = BoughtListProduct[i];//get current product

    if (!newBoughtProductList.Contains(currentProduct)) //see if duplicate
        newBoughtProductList.Add(currentProduct);       //add product

    else 
    {
        int copyingProduct = BoughtProductList.FindIndex(currentProduct);
        //get duplicates index

        newBoughtProductList[copyingProduct].price += 
           newBoughtProductList[copyingProduct].price;//add to price of duplicate
    }
}

这基本上搜索列表并且不添加任何重复项,然后如果某项是重复项,它会通过重复项的价格增加价格。注意:这不使用linq(但您可能知道)希望这会有所帮助!

于 2012-08-21T13:43:14.567 回答