Как сделать оператор 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);
Другие вопросы по тегам