所以我有一类产品:
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以查看我在该列表中销售该苹果的金额。
答案 0 :(得分: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()};
答案 1 :(得分:1)
您要做的是在产品的GroupBy
属性上执行id
。完成后,您可以添加每个组中的id
和product_name
,并知道它将是不同的。您还可以Sum
超过每个组的价格(或者只是将数量乘以价格),以获得销售该产品所赚取的金额。
答案 2 :(得分: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
(但你可能知道)希望这会有所帮助!