在这个 LINQ 语句中,我应该把“orderby group.key”放在哪里?

Edw*_*uay 3 c# linq

这段代码:

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);
    });
Run Code Online (Sandbox Code Playgroud)

输出这个:

Words that being with C:
  car
  crow
Words that being with B:
  boy
  bill
  brown
Words that being with A:
  apple
Run Code Online (Sandbox Code Playgroud)

但是我应该把 orderby 语句放在哪里,以便它按字母顺序列出?

Jon*_*eet 5

我假设您想对组组内的单词进行排序?尝试这个:

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();
Run Code Online (Sandbox Code Playgroud)

或者:

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();
Run Code Online (Sandbox Code Playgroud)

(第二种形式是我最初在我的答案中使用的,除了我在“orderby”中包含了一个导致编译失败的空格。我想知道为什么会这样。Doh!)

当然,你也可以用一个点符号语句来完成整个事情:

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