如何使用 ServiceStack OrmLite 执行 GroupBy 语句

How to do a GroupBy statement with ServiceStack OrmLite

我正在为数据可视化做一些查询,并依靠 GroupBy、Avg、Sum 和类似函数从数据库中获取良好的数据集。

我想在 ServiceStack OrmLite 中使用类似于 GroupBy 的东西。在 ShippersExample page 上,我看到了以下查询。有没有更简单或更好的方法来做到这一点?

例如,我有一个 'location' 列,我想找到条目的前 5 个位置,并列出这些位置及其出现的次数。我只有 1 个 table,所以不需要连接。

    var rows = db.SqlList<ShipperTypeCount>(
       "SELECT {0}, COUNT(*) AS Total 
       FROM Shippers 
       GROUP BY {0} 
       ORDER BY Total".Fmt("ShipperTypeId".SqlColumn()));

您也可以使用 SqlExpression,例如:

var rows = db.SqlList<ShipperTypeCount>(
    db.From<Shipper>()
    .GroupBy(x => x.ShipperTypeId)
    .OrderBy("Total")
    .Select(x => new { x.ShipperTypeId, Total = Sql.As(Sql.Count("*"), "Total") }));

或者,除了使用具体的 POCO,您还可以使用通用字典来填充 ShipperTypeId => Total 的字典,例如:

var q = db.From<Shipper>()
    .GroupBy(x => x.ShipperTypeId)
    .OrderBy("2")
    .Select(x => new { x.ShipperTypeId, Total = Sql.Count("*") });

var results = db.Dictionary<int, int>(q);