如何将 Count(*) 与 DAL2 一起使用?

Posted

技术标签:

【中文标题】如何将 Count(*) 与 DAL2 一起使用?【英文标题】:How do I used Count(*) with DAL2? 【发布时间】:2014-01-09 18:11:14 【问题描述】:

我想在我的一些表中获取各种数据分组的计数,但不确定是否可以使用 DAL2。

我想执行如下查询:

SELECT  DISTINCT productType, COUNT(*) FROM Products GROUP BY productType

我遇到的信息仅包括允许用户指定 SQL 的 WHERE 部分的示例。不幸的是,这个例子绕过了查询的 WHERE 部分,所以我不确定我应该如何使用 DAL2 来解决这个问题。是否可以使用 DAL2 或者我需要以另一种方式查询数据库?如果可以使用 DAL2 完成,我该如何执行这样的查询?

【问题讨论】:

【参考方案1】:

我不能告诉你什么是最佳实践。但我有一个 SQL 服务器后端,并使用 dal2 和一个 dnn 模块。我刚刚使用我的分组和连接在 SQL Server 中创建了一个视图,然后将该视图映射为一个表(在类注释中使用视图名称而不是表名称),并自动递增 false。为我工作,我从预编译和非动态查询中受益。如果您需要动态生成它,我不确定最好的方法是什么。

我很想听听其他成员的意见。

【讨论】:

【参考方案2】:

仅显示WHERE部分的示例意味着PetaPoco为您填写"SELECT * FROM TableName"部分,但您当然可以执行自己的sql语句

在你的情况下:

public class ProductCount 
   public int ProductType get; set;
   public int Count get; set;


var ProductCountList = db.Fetch<ProductCount>(@"SELECT DISTINCT productType, 
        COUNT(*) as Count 
        FROM Products 
        GROUP BY productType");

【讨论】:

谢谢爱德华多。看起来这是正确的解决方案,但是在我的代码中,我使用 IDataContext 对象与数据库进行交互。我对 IDataContext 对象中的 .ExecuteQuery() 使用了类似的技术,它似乎正在工作。我使用的对象没有 .Fetch()。这里的“db”是什么类型的对象? 我说的是 PetaPoco。我读过它基于 PetaPoco 的 DAL2。也许你有Query() 功能 谢谢。如果人们使用 .ExecuteQuery(),这就是答案。我在评论中的问题是针对您示例中变量“db”的对象类型。声明会是什么样子? 点赞var db = new PetaPoco.Database(connectionString);

以上是关于如何将 Count(*) 与 DAL2 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

将 MySQL 的 COUNT 与两个表一起使用

为啥 DNN 中 DAL2 存储库的默认 GetById() 执行缓慢?

如何将范围与变量一起使用 - 1004 错误不断出现

如何将案例条件与聚合一起使用?

将 Sklearn GridSearchCV 与 Pipeline 一起使用时如何传递权重

QueryDsl SpringData Jpa findAll 如何避免count()