代码之家  ›  专栏  ›  技术社区  ›  Alex

如何在LINQ中对多个表进行分组

  •  2
  • Alex  · 技术社区  · 15 年前

    所以,我理解Group By的工作原理如下:

    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) };
    

    这样的分组只允许我访问C的内容,但是如果我同时需要表C和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) };
    

    这是可能的吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Ben M    15 年前
    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) 
                };
    
        2
  •  1
  •   Jacob Proffitt    15 年前

    在我看来,本的回答有点过于复杂。像这样反转选择/加入对会更简单:

    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)
                            };