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

问题描述:

验证码:我在哪里把“orderby group.key”放在这个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); 
    }); 

输出这样:

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

但我在哪里把排序依据语句,以便它以字母顺序列出了呢?

我假设你想订购组内的单词?试试这个:

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

或:

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

(第二种形式是什么原本在我的回答我,除了我列入“排序依据”空间造成编译失败我不知道为什么这是DOH)

当然,你可以做整个事情在一个点符号声明过:!

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

是的,这是我很感谢 – 2009-11-05 09:54:13

种两个选择:

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

或使用into并重新选择:

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; 
+0

惯于这只订单中的组通过钥匙,而不是单个项目后每个键? – 2009-11-05 10:00:28

+0

确实;国际海事组织,乔恩(又名托尼小马)得到了额外的信息... mix'n'match与'Words = group.OrderBy(x => x)'从那里。 – 2009-11-05 11:02:31

+0

我主要是把这个“按原样”简单地通过'into'来显示替代位置。 – 2009-11-05 11:03:29