use*_*437 5 c# linq dictionary igrouping
var Students = new Dictionary<string, int>();
Students.Add( "Bob" , 60);
Students.Add( "Jim" , 62);
Students.Add( "Jack", 75);
Students.Add( "John", 81);
Students.Add( "Matt", 60);
Students.Add( "Jill", 72);
Students.Add( "Eric", 83);
Students.Add( "Adam", 60);
Students.Add( "Gary", 75);
var MyVar = Students.GroupBy(r=> r.Value)
.ToDictionary(t=> t.Key, t=> t.Select(x=> x.Key));
Run Code Online (Sandbox Code Playgroud)
该Students对象有Name与Weight键-值对.
在ToDictionary方法中,t变量是类型IEnumerable<IGrouping<K, T>>.那是,IEnumerable<IGrouping<int, Students>>
为什么Key返回的值t=>t.Key和t=> t.Select(**x=> x.Key**)不同?它们都使用相同的t变量.Key应该是类型int.
图像是在执行GroupBy方法之后拍摄的.(它不是完整图像)其中一个Key具有值,60而另一个具有值Bob,Matt和Adam.

因为它不是一个
IEnumerable<IGrouping<int, Student>>
Run Code Online (Sandbox Code Playgroud)
它是
IEnumerable<IGrouping<int, KeyValuePair<int, Student>>>
Run Code Online (Sandbox Code Playgroud)
在t => t.Key您指的是分组键,在Select(x => x.Key)您指的是KeyValuePair.
您可以将鼠标悬停在 Visual Studio 中的变量上以查看类型和类型参数。
更详细地说:
// return an IEnumerable<IGrouping<int, KeyValuePair<int, Student>>>
Students.GroupBy(r=> r.Value)
// iterate over each IGrouping<int, KeyValuePair<int, Student>>
.ToDictionary(
group => group.Key,
// iterate over each KeyValuePair<int, Student> in the group
// because IGrouping<TKey, TElement> inherits from IEnumerable<TElement>
// so it's a Select over an IEnumerable<KeyValuePair<int, Student>>
group => group.Select(pair => pair.Key));
Run Code Online (Sandbox Code Playgroud)