EF Возврат агрегированных и неагрегированных данных - PullRequest
2 голосов
/ 14 июня 2011

Учитывая приведенную ниже структуру таблицы, как я могу вернуть следующие агрегированные и сгруппированные поля, используя frawework для сущностей.

Обязательные поля
Сгруппированные:
User.Forename
User.Surname

Aggregated:
Максимальное (Order.OrderDate) количество (Order.OrderId)
Sum (Payment.Amount)
Количество (Order.OrderId для всех заказов за последние 60 дней)
Sum (Payment.Amount для всех заказов за последние 60 дней)

Таблицы
Пользователи:
UserId (PK) Имя
Фамилия

Заказы:
OrderId (PK)
UserId (FK)
OrderDate

Платежи:
PaymentId (PK)
OrderId (FK)
PaymentAmount

1 Ответ

3 голосов
/ 14 июня 2011
DateTime last60Days = new DateTime(xxx,xxx,xxx);

var query = from u in context.Users
            group u by new
            {
              u.Forename,
              u.Surname
            } into ug
            select new
            {
              Forename = ug.Key.Forename,
              Surname = ug.Key.Surname,
              MaxOrderdate = ug.SelectMany(x => x.Orders).Max(x => x.OrderDate),
              OrderCount = ug.SelectMany(x => x.Orders).Count(),
              Payment = ug.SelectMany(x => x.Orders.SelectMany(y => y.Payments)).Sum(x => x.PaymentAmount),
              OrderCountLast60 = ug.SelectMany(x => x.Orders).Where(x => x.OrderDate > last60Days).Count(),
              PaymentLast60 = ug.SelectMany(x => x.Orders.Where(x => x.OrderDate > last60Days).SelectMany(y => y.Payments)).Sum(x => x.PaymentAmount)
            };
...