Как сгруппировать более одной таблицы по в LINQ - PullRequest
2 голосов
/ 07 августа 2009

Итак, я понимаю, что группировка по принципу работает в основном так:

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 ]

2 голосов
/ 07 августа 2009
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 голос
/ 07 августа 2009

Ответ Бена немного сложнее, ИМО. Проще было бы поменять местами пару «выбор / объединение» следующим образом:

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)
                        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...