Linq ToDictionary()实现

时间:2015-05-11 15:02:13

标签: c# linq dictionary

我的列表如下:

List<Person> people = new List<Person>()
{
    new Person() { FirstName = "Bob",LastName="test",EMPID="1234" },
    new Person() { FirstName = "Bob",LastName="t",EMPID="1234" },
    new Person() { FirstName = "Jane",LastName="test",EMPID="1234" },
    new Person() { FirstName = "Jane",LastName="t",EMPID="1234" }
};

如果添加FirstName和LastName,则所有人员字段都是唯一的。

如果我使用

  Dictionary<string, Person> dictionary = people.ToDictionary(v => v.FirstName); 

然后我会得到Item已经存在的异常。

甚至我也不能使用LastName。

所以我需要使用FirstName和LastName的组合,并且该值可以保存为FirstName;字典键中的#LastName

我是C#development的新手

任何建议都非常有用。

此致

阿南德

1 个答案:

答案 0 :(得分:1)

如果您找不到唯一的密钥(或者不想将该密钥用于字典),除IDictionary<TKey, TValue>.之外还有其他选择

例如,您可以创建一个查找:

people.ToLookup(v => v.FirstName);

查找接受每个键有多个匹配(实际上它是唯一的目的)。然后可以像字典一样访问它,但它将返回枚举而不是单个值:

var lookup = people.ToLookup(v => v.FirstName);
var johns = lookup["John"];
foreach (var john in johns)
{
    Debug.WriteLine(john.ToString());
}

你也可以使用linq&#39; GroupBy扩展,其目的与查找密切相关,但迭代是不同的。另外,您可以在迭代时发现密钥(事先不需要查找密钥的情况):

var groups = people.GroupBy(v => v.FirstName);
foreach (var grp in groups)
{
    var key = grp.Key;
    foreach (var person in grp)
    {
        Debug.WriteLine(person.ToString());
    }
}