如何使用ServiceStack OrmLite执行GroupBy语句

rob*_*rtc 2 ormlite-servicestack

我正在对数据可视化进行一些查询,并依赖GroupBy,Avg,Sum和类似函数从数据库中获取一个好的数据集.

我想使用与ServiceStack OrmLite类似的GroupBy.在ShippersExample页面上,我看到以下查询.有更简单或更好的方法吗?

例如,我有一个"位置"列,想要查找条目的前5个位置,并列出这些位置的次数.我只有1个表,所以不需要加入.

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

myt*_*thz 6

您也可以使用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") }));
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用通用字典来填充字典,而不是使用具体的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);
Run Code Online (Sandbox Code Playgroud)