2010-11-22 21 views
4

Dans this example:Quelle est l'équivalent des méthodes d'extension C# pour cette requête Linq?

public void Linq40() 
{ 
    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 

    var numberGroups = 
     from n in numbers 
     group n by n % 5 into g 
     select new { Remainder = g.Key, Numbers = g }; 

    foreach (var g in numberGroups) 
    { 
     Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", 
      g.Remainder); 

     foreach (var n in g.Numbers) 
     { 
      Console.WriteLine(n); 
     } 
    } 
} 

Quel est l'équivalent pur C#? Je reçois ce ...

var numberGroups = numbers.GroupBy(n => n % 5)... 

mais la clause into est un peu un mystère, et je ne peux pas comprendre comment tirer le Key du Select.

+1

Je pense que vous voulez dire la façon de le faire avec "Méthodes d'extension"? – JOBG

Répondre

8

GroupBy retourne un IEnumerable<T> de <IGrouping<TKey, TSource>. Avec cela, vous pouvez faire une seconde opération de sélection, qui renvoie des valeurs exactement comme ci-dessus:

var numberGroups = numbers.GroupBy(n => n % 5) 
          .Select(g => new { Remainder = g.Key, Numbers = g }); 
8
numbers.GroupBy(n => n % 5).Select(g => new { Remainder = g.Key, Numbers = g });