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
进行分组。我不明白我和戴维德的答案怎么对你不起作用。当您尝试我们的任一解决方案时,您会得到什么?这与您想要的有什么不同?