2010-11-22 7 views
4

In this example:Was ist die C# -Erweiterungsmethode für diese Linq-Abfrage?

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

Was ist die reine C# Äquivalent? Ich dieses ...

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

aber die into Klausel ist ein bisschen ein Rätsel, und ich kann nicht herausfinden, wie die Key vom Select zu bekommen.

+1

Ich denke, Sie meinen den Weg mit "Extension Methods"? – JOBG

Antwort

8

GroupBy gibt ein IEnumerable<T> von <IGrouping<TKey, TSource>. Damit können Sie eine zweite Select-Operation ausführen, die genau die oben genannten Werte zurückgibt:

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