如何使用 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);
我正在为数据可视化做一些查询,并依靠 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);