无法获得产品数量

时间:2011-09-03 10:34:52

标签: c# winforms linq entity-framework linq-to-entities

我有带列的产品表

 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(),

2 个答案:

答案 0 :(得分:2)

您缺少的是对具有相同product_id

的行数进行计数

在SQL中执行组后,您可以使用聚合函数,如sum,count,max,min等,在您的情况下,您可以执行分组,但忘记插入计数。

请参阅这里有关如何在LINQ中使用计数的语法的非常相似的问题:

LINQ to SQL using GROUP BY and COUNT(DISTINCT)

答案 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

所以有两种相同的产品有不同的价格。