2011-06-14 59 views
2

鑑於下表結構,如何使用實體frawework返回以下彙總的分組字段。EF返回彙總和非彙總數據

必填字段
分組:
User.Forename
User.Surname

彙總:
最大值(Order.OrderDate) 計數(Order.OrderId)
薩姆(Payment.Amount)
Count(Order.OrderId for last orders in last 60 days) )
總和(Payment.Amount在過去60天內的所有訂單)


用戶:
用戶ID(PK) 用的名字

訂單:
OrderId(PK)
UserId(FK)
次訂購日期

付款:
PaymentId(PK)
的OrderId(FK)
PaymentAmount

回答

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

出色答卷。正是我需要的,謝謝。 – 2011-06-15 06:32:26