Как сделать оператор GroupBy с помощью ServiceStack OrmLite
Я делаю несколько запросов для визуализации данных и полагаюсь на GroupBy, Avg, Sum и аналогичные функции, чтобы получить хороший набор данных из БД.
Я хотел бы использовать что-то похожее на GroupBy с ServiceStack OrmLite. На странице ShippersExample я вижу следующий запрос. Есть ли более простой или лучший способ сделать это?
Например, у меня есть столбец "местоположение", и я хотел бы найти 5 лучших местоположений записи, и перечислить эти места с количеством раз, когда это происходит. У меня есть только 1 стол, поэтому нет необходимости в соединениях.
var rows = db.SqlList<ShipperTypeCount>(
"SELECT {0}, COUNT(*) AS Total
FROM Shippers
GROUP BY {0}
ORDER BY Total".Fmt("ShipperTypeId".SqlColumn()));
1 ответ
Вы также можете использовать 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);