Dove inserisco “orderby group.key” in questa istruzione LINQ?

questo codice:

string[] words = {"car", "boy", "apple", "bill", "crow", "brown"}; var groups = from w in words group w by w[0] into g select new {FirstLetter = g.Key, Words = g}; //orderby ???; var wordList = groups.ToList(); //var wordList = groups.ToList().OrderBy(???); wordList.ForEach(group => { Console.WriteLine("Words that being with {0}:", group.FirstLetter.ToString().ToUpper()); foreach(var word in group.Words) Console.WriteLine(" " + word); }); 

emette questo:

 Words that being with C: car crow Words that being with B: boy bill brown Words that being with A: apple 

Ma dove inserisco la dichiarazione orderby in modo che sia elencata in ordine alfabetico?

Immagino tu voglia ordinare sia i gruppi che le parole all’interno del gruppo? Prova questo:

 var groups = from w in words group w by w[0] into g select new { FirstLetter = g.Key, Words = g.OrderBy(x => x) }; var wordList = groups.OrderBy(x => x.FirstLetter).ToList(); 

o:

 var groups = from w in words group w by w[0] into g orderby g.Key select new { FirstLetter = g.Key, Words = g.OrderBy(x => x) }; var wordList = groups.ToList(); 

(La seconda forma è ciò che avevo originariamente nella mia risposta, tranne che ho incluso uno spazio in “orderby” che ha causato un errore di compilazione. Mi chiedevo perché fosse così.

Ovviamente si potrebbe fare il tutto anche in una dichiarazione di notazione a punti:

  var wordList = words.GroupBy(word => word[0]) .OrderBy(group => group.Key) .Select(group => new { FirstLetter = group.Key, Words = group.OrderBy(x => x) }) .ToList(); 

Due scelte:

 var groups = from w in words group w by w[0] into g orderby g.Key select new {FirstLetter = g.Key, Words = g}; 

o utilizzare e ri-selezionare:

 var groups = from w in words group w by w[0] into g select new { FirstLetter = g.Key, Words = g } into grp orderby grp.FirstLetter select grp;