2010-03-10 3 views
0
var expr = Data.Customers 
     .GroupBy(c => c.Country, c => c.Name); 

    foreach (IGrouping<Countries, string> customerGroup in expr) 
    {     
     Trace.WriteLine("Country: " + customerGroup.Key); 
     foreach (var item in customerGroup) 
     { 
      Trace.WriteLine(item); 
     } 
     Trace.WriteLine(""); 
    } 

Я желаю я получил следующий результат:GroupBy многими различными ключами

Страна: Италия

Paolo Marco

Страна: США

Джеймс Frank

вместо:

Страна: Италия Paolo Marco

Страна: США Джеймс Frank Frank

Если это возможно, пожалуйста, сделайте это, используя стандартный синтаксис LINQ.

+2

Вы не указали свои входные данные или что это связано с «множеством разных ключей». –

+0

Посмотрите на [этот пример] (http://www.arpitkhandelwal.com/2011/12/c-linq-to-objects-using-groupby-with.html), если он работает для вас –

ответ

7

Если вы хотите сгруппировать по нескольким клавишам вы должны использовать анонимный тип:

var expr = Data.Customers 
      .GroupBy(c =>new{c.Country, c.Name}); 

Тогда вы можете получить доступ к expr.Key.Country и expr.Key.Name.

+0

Пришла мне 4 часа, чтобы найти простое объяснение - спасибо – Chev

0

На первый взгляд, я думаю, вам не нужно группировать по имени

var expr = Data.Customers 
     .GroupBy(c => c.Country); 
+0

A также необходимо группировать последовательность по имени –

0
var expr = Data.Customers 
        .Select(c => new { c.Country, c.Name}) 
        .Distinct() 
        .GroupBy(c => c.Country, c => c.Name); 

Я нашел неуклюжие решения, но без использования синтаксиса LINQ.

+0

Я не понимаю, чего вы пытаетесь достичь. Этот запрос действительно не имеет смысла (или я его не вижу). Какова цель группировки в группы только одного элемента? –

+0

Я уже достиг результата. Я захотел отфильтровать клиентов по их именам с помощью оператора GroupBy, потому что я не хотел иметь несколько похожих имен, таких как Фрэнк, а затем хотел объединить клиентов по странам. –

+0

Я был бы рад, если бы кто-нибудь сказал мне, как добиться результата, используя синтаксис LINQ. –

Смежные вопросы