2011-06-14 5 views
2

Étant donné la structure de tableau ci-dessous, comment puis-je retourner les champs groupés et agrégés suivants en utilisant le frawework d'entité.Données EF agrégées et non agrégées

Les champs obligatoires
: Groupés
User.Forename
User.Surname

Agrégation:
maximum (Order.OrderDate) Count (Order.OrderId)
Somme (Payment.Amount)
Count (Order.OrderId pour toutes les commandes au cours des 60 derniers jours)
Somme (Payment.Amount pour toutes les commandes de 60 derniers jours)

Tables
Utilisateurs:
UserId (PK) Prénom Nom

Ordres:
OrderId (PK)
UserId (FK)
OrderDate

paiements:
PaymentId (PK)
OrderId (FK)
PaymentAmount

Répondre

3
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) 
      }; 
+0

de réponse excellent. Exactement ce dont j'avais besoin, merci. –

Questions connexes