【问题标题】:not able to get the number of products count无法获得产品数量
【发布时间】:2011-09-04 00:14:52
【问题描述】:

我有带有列的产品表

 product_id (p.k)
 product_name
 product_description
 product_price
 category_id

我已经像这样设置product_id 的属性...(主键,不为空,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(),

【问题讨论】:

  • 有没有人能帮我解决这个问题...

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


【解决方案1】:

您缺少的是计算具有相同 product_id 的行数

在 SQL 中,您可以使用汇总函数,如 sum、count、max、min 等,在您的情况下,您执行 group by 但忘记插入计数。

在此处查看这个非常相似的问题,了解如何在 LINQ 中使用计数的语法:

LINQ to SQL using GROUP BY and COUNT(DISTINCT)

【讨论】:

    【解决方案2】:

    如果product_id 是主键,那么每个条目不是都不同吗?没有两行会有相同的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
    

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

    【讨论】:

    • 非常感谢......但这不是我要问的......我需要用可用的产品(可用库存)表示数据网格视图......拥有的产品数量同名......就像我在我的问题中提到的示例数据网格视图......
    • 我认为没有人知道你真正想要的是什么。你能用常规的 SQL 查询表达你想要的吗?如果您希望按相同的产品名称对事物进行分组,那么只需将我提供的分组更改为 .GroupBy(x.product_name)
    • 我已经在我的问题中指定(示例数据网格视图)我想要完全一样的......
    • 这正是(我认为)我给你的......你应该按Product_Name而不是Product_Id分组。我不明白我和戴维德的答案如何不适合你。当您尝试我们的任一解决方案时,您会得到什么,这与您想要的有什么不同?
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多