我有带列的产品表
product_id (p.k)
product_name
product_description
product_price
category_id
我已经像这样设置了product_id
的属性......(主键,非null,A.I)
我试图将数据网格视图中相同产品的数量表示为像这样的列
product_name product_description stock available product price
a good product 2 (a+a) 300
b bad product 3 (b+b+b) 400
通过以下方法......
var stockavailable = dbcontext.products
.GroupBy(x => x.product_Id)
.Select(a => new
{
productid = a.Key,
productnam = a.FirstOrDefault().product_Name,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
bindingsource.DataSource = stockavailable;
datagridview1.DataSource = bindingsource;
但即使有两个相同的产品,也没有显示产品数量。如果有不同的product_id,那么任何人都可以帮忙...
编辑:
我可以这样做.....
stockavailable = a.select(x=>x.product_id).Distinct().Count()
Instead of this stockavailable = a.LongCount(),
答案 0 :(得分:2)
您缺少的是对具有相同product_id
在SQL中执行组后,您可以使用聚合函数,如sum,count,max,min等,在您的情况下,您可以执行分组,但忘记插入计数。
请参阅这里有关如何在LINQ中使用计数的语法的非常相似的问题:
答案 1 :(得分:0)
如果product_id
是主键,那么每个条目都不是唯一的吗?没有2行会有相同的product_id
,对吗?如果这是真的,那么GroupBy(x => x.product_id)
将不会进行任何真正的分组。每一行都是自己的一组。
我认为你想要的更接近:
var stockavailable = dbcontext.products
.GroupBy(x => new {x.product_Name, x.product_Description, x.product_Price })
.Select(a => new
{
productnam = a.Key.product_Name,
productdescr = a.Key.product_Description,
stockavailable = a.LongCount(),
productprice = a.Key().product_Price
});
另外,添加product_Quantity
列不是更容易吗?你的桌子现在的设置方式,你不能拥有:
id | name | desc | price
1 a good 350
2 a good 300
3 b bad 400
所以有两种相同的产品有不同的价格。