我在哪里把"排序依据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
但我在哪里把排序依据语句,以便它按字母顺序列出了?
答
我想你要订购这两个群体的和的该组内的话吗?试试这个:
I assume you want to order both the groups and the words within the group? Try this:
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)
(The second form is what I originally had in my answer, except I included a space in "orderby" which caused a compilation failure. I wondered why that was. Doh!)
当然,你可以做整个事情在一个点符号声明太:!
Of course you could do the whole thing in one dot notation statement too:
var wordList = words.GroupBy(word => word[0])
.OrderBy(group => group.Key)
.Select(group => new { FirstLetter = group.Key,
Words = group.OrderBy(x => x) })
.ToList();