Reputation: 6884
Given the below table structure, how can I return the following aggregated and grouped fields using entity frawework.
Required fields
Grouped:
User.Forename
User.Surname
Aggregated:
Maximum(Order.OrderDate)
Count(Order.OrderId)
Sum(Payment.Amount)
Count(Order.OrderId for all orders in last 60 days)
Sum(Payment.Amount for all orders in last 60 days)
Tables
Users:
UserId (PK)
Forename
Surname
Orders:
OrderId (PK)
UserId (FK)
OrderDate
Payments:
PaymentId (PK)
OrderId (FK)
PaymentAmount
Upvotes: 2
Views: 89
Reputation: 26634
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)
};
Upvotes: 3