2009-08-06 8 views
2

Alors, je comprends ce groupe par des œuvres essentiellement comme ceci:Comment groupe plus d'une table par LINQ dans

var query = from c in context.Contacts 
      join o in context.Orders on c.Id on o.CustomerId 
      group c by o.Id 
      select new { g.Key, g.Sum(c => c.Whatever) }; 

Grouper comme ça ne me permet d'accéder au contenu de c. Mais que faire si je voulais des données des deux tables c et o?

var query = from c in context.Contacts 
      join o in context.Orders on c.Id on o.CustomerId 
      //insert answer here 
      select new { g.Key, g.Sum(c => c.Whatever), g.Sum(o => o.Whatever) }; 

Est-ce encore possible?

Répondre

2
var query = from c in context.Contacts 
      join o in context.Orders on c.Id equals o.CustomerId 
      select new 
      { 
       Contact = c, 
       Order = o 
      } into ContactAndOrder 
      group ContactAndOrder by ContactAndOrder.Order.Id into g 
      select new 
      { 
       g.Key, 
       ContactWhatever = g.Sum(co => co.Contact.Whatever), 
       OrderWhatever = g.Sum(co => co.Order.Whatever) 
      }; 
1

La réponse de Ben est un peu trop compliquée, IMO. Il serait plus simple d'inverser l'appariement sélectionner/joindre comme ceci:

var query = from o in context.Orders 
      join c in context.Contacts on o.CustomerId equals c.Id into Customers 
      group o by o.Id into g 
      select new { 
         g.Key, 
         ContactWhatever = g.Sum(o => o.Customers.Sum(c => c.Whatever)), 
         OrderWhatever = g.Sum(o => o.Whatever) 
         };