【问题标题】:How can I get the count in linq?我怎样才能得到 linq 的计数?
【发布时间】:2021-05-24 01:06:59
【问题描述】:

我有一个名为 products 的表,其中包含列:

productid ,
productname,
productprice
categoryid

我的问题是我想根据产品名称和详细信息获取产品数量。我想在DataGridView 中显示数据。我怎样才能知道单个产品名称的产品数量,如下所示?

productid        productname          productavailable        productprice
--------------------------------------------------------------------------
1                product A            2 products(product A)   100
2                product B            5 Products(product B)   200

像上表一样,我必须在DataGridView 中显示。我正在使用 LINQ 和 C#,我的 DbContext 名称是 tsgdbcontext

【问题讨论】:

  • 你真的同时使用entity-framework和linq-to-sql吗?它们是来自 MS 的两个不同框架。
  • 问题有点令人困惑,“productavailable”是您的产品表中的一列吗?算不算数?
  • @marr75 productavaialable 不是数据库中的列,而是用于查找产品数量的数据网格视图中的列......
  • 他可以同时使用linq和实体框架... LINQ != LINQ to SQL。 LINQ 只是框架的一组扩展。
  • @xanatos 对不起,我意外地使用了实体框架,我已经标记了 linq-to-sql ...

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


【解决方案1】:

GroupBy 与包含您的分组属性的键一起使用。然后select 从分组中取出关键属性以及每个属性的计数。

var query = tsgdbcontext.Products
                        .GroupBy(p => new {
                            p.ProductId,
                            p.ProductName,
                            p.ProductPrice
                         })
                        .Select(g => new {
                            g.Key.ProductId,
                            g.Key.ProductName,
                            g.Key.ProductPrice,
                            Available = g.Count()
                        });

【讨论】:

【解决方案2】:

不确定我是否完全理解 + 做出一些假设,但这里有一个示例 linq 查询,它根据一些任意选择标准(id=2 且价格大于 100)生成计数...

int count = (from p in tsgdbcontext.Products
             where p.productid == 2 && p.productprice > 100
             select p).Count();

【讨论】:

  • 这不是从数据库中检索整个数据集,与仅从数据库中获取元素数量的专用 COUNT 表达式相对吗?
  • @Oszkar 不,它没有。 COUNT(1) 将添加到发送到数据库的查询中。
  • 如果没有可用的产品怎么办,这是返回 0 还是抛出空异常?
  • 假设Products 本身不为空,则不为空(空也可以)。如果Products 包含空值,那么当p 为空并且访问p.productid 时,它将抛出where
  • 是的,我刚刚测试过,它返回0。但是空列表的.Sum() 抛出异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多