如何使用Linq获取不止一次键的字典?

BuZ*_*uZz 0 c# linq

假设一个对象如:

class A {
  string Country;
  string Region;
}
Run Code Online (Sandbox Code Playgroud)

并且IEnumerable<A>如:

    "Denmark", "Arhus"
    "Denmark", "Bornholm"
    "Denmark", "Frederiksborg"
    "Denmark", "Fyn"
    "Denmark", "Copenhagen"
    "Denmark", "Nordjylland"
    "France", "Alsace"
    "France", "Aquitaine"
    "France", "Auvergne"
    "France", "Basse-Normandie"
    "France", "Bourgogne"
    "France", "Bretagne"
    "France", "Centre"
    "France", "Champagne-Ardenne"
    "France", "Corse"
    etc...
Run Code Online (Sandbox Code Playgroud)

如何获得IDictionary<string, IEnumerable<string>> resLinq哪里res['Country']可以返回IEnumerable<string>相应的区域?

Ser*_*rvy 6

ToLookup 应该准确地给你你想要的东西.

var lookup = data.ToLookup(a => a.Country, a=> a.Region);
Run Code Online (Sandbox Code Playgroud)

从技术上讲,它是不可变的,因此没有实现IDictionary.如果您必须实现该接口,那么您需要将查找转换为字典:

var dictionary = lookup.ToDictionary(group => group.Key, 
    group => group.AsEnumerable());
Run Code Online (Sandbox Code Playgroud)