C# 无法获取产品数量计数
我有一个带列的产品表C# 无法获取产品数量计数,c#,winforms,linq,entity-framework,linq-to-entities,C#,Winforms,Linq,Entity Framework,Linq To Entities,我有一个带列的产品表 product_id (p.k) product_name product_description product_price category_id 我已经像这样设置了product\u id的属性…(主键,非空,A.I) 我试图将datagrid视图中相同产品的数量表示为如下列 product_name product_description stock available product price a
product_id (p.k)
product_name
product_description
product_price
category_id
我已经像这样设置了product\u id
的属性…(主键,非空,A.I)
我试图将datagrid视图中相同产品的数量表示为如下列
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;
但即使有两种相同的产品,它也不会显示产品的数量。对于不同的产品id,请任何人在这方面提供帮助
编辑:我能这样做吗
stockavailable = a.select(x=>x.product_id).Distinct().Count()
Instead of this stockavailable = a.LongCount(),
您缺少的是对具有相同
product\u id
在SQL中,执行group by后,可以使用聚合函数,如sum、count、max、min等,在您的示例中,执行group by时忘记插入计数
有关如何在LINQ中使用计数的语法,请参见以下非常类似的问题:
如果
产品id
是主键,那么不是每个条目的主键都是不同的吗?没有两行具有相同的产品id
,对吗?如果这是真的,那么GroupBy(x=>x.product\u 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
});
另外,如果只添加一个产品数量
列,不是更容易吗?您的桌子现在的摆放方式,您不能:
id | name | desc | price
1 a good 350
2 a good 300
3 b bad 400
所以有两种相同的产品价格不同。有谁能帮我一下吗…非常感谢。。但这不是我要问的。。。。。我需要用可用产品(可用库存)表示datagrid视图…具有相同名称的产品数量。。。。就像我在问题中提到的示例datagrid视图一样……我认为没有人知道您真正想要的是什么。您能否将所需内容表示为常规SQL查询?如果您希望使用相同的产品名称对事物进行分组,那么只需将我提供的分组改为
.GroupBy(x.product\u name)
。我已经在我的问题(示例datagrid视图)中指定了我想要的完全相同的……这正是(我认为)我给您的。。。您应该按产品名称
而不是产品Id
进行分组。我不明白我和戴维德的答案怎么对你不起作用。当您尝试我们的任一解决方案时,您会得到什么?这与您想要的有什么不同?