获取分组结果并添加到多个列表c#

获取分组结果并添加到多个列表c#,c#,xml,linq,C#,Xml,Linq,我有一个从XML文件反序列化到的列表 XmlRootAttribute Root = new XmlRootAttribute(); Root.ElementName = "PersonList"; List<Person> persons; using (var reader = new StreamReader("Test.xml")) { XmlSerializer deserializer = new XmlSerializer(typeof(List&l

我有一个从XML文件反序列化到的列表

XmlRootAttribute Root = new XmlRootAttribute();
Root.ElementName = "PersonList";

List<Person> persons;
using (var reader = new StreamReader("Test.xml"))
{
    XmlSerializer deserializer = new 
    XmlSerializer(typeof(List<Person>),Root);
    persons = (List<Person>)deserializer.Deserialize(reader);
}

如果有人提出问题,请直接提问。

GroupBy
之后,通常要做的一件事是构建一个
字典,将ID映射到项目列表:

var test = persons
    .GroupBy(u => u.ID)
    .ToDictionary(g => g.Key, g => g.ToList());
这允许您选择具有特定ID的用户列表,并使用其相应的用户列表迭代所有ID:

foreach (var p in test) {
    var id = p.Key;
    var list = p.Value;
    Console.WriteLine("ID={0}: {1} persons", id, list.Count);
}

如果您对linq group by不满意

//申报字典

  static Dictionary<int, List<Person>> dictionaryPerson = new Dictionary<int, List<Person>>();
foreach (var person in persons)
                {
                    if (!dictionaryPerson.ContainsKey(person.Id))
                    {
                        dictionaryPerson.Add(person.Id, new List<Person> { person });
                    }
                    else
                    {
                        dictionaryPerson[person.Id].Add(person);
                    }
                }
static Dictionary Dictionary person=new Dictionary();
//如果dictionary已经有密钥,则添加列表,否则在dictionary中创建一个新条目

  static Dictionary<int, List<Person>> dictionaryPerson = new Dictionary<int, List<Person>>();
foreach (var person in persons)
                {
                    if (!dictionaryPerson.ContainsKey(person.Id))
                    {
                        dictionaryPerson.Add(person.Id, new List<Person> { person });
                    }
                    else
                    {
                        dictionaryPerson[person.Id].Add(person);
                    }
                }
foreach(var个人对个人)
{
如果(!dictionaryPerson.ContainsKey(person.Id))
{
dictionaryPerson.Add(person.Id,新列表{person});
}
其他的
{
dictionaryPerson[person.Id]。添加(person);
}
}

您得到了什么结果以及期望得到什么?我目前没有得到任何结果,因为我不知道如何输出结果。我希望根据每个“人”的ID对他们进行分组,如果ID等于,我们就说“4”,将其添加到列表中。或者,如果它等于“5”,则将其添加到另一个列表中。
ToLookup
在功能上与
词典相同,可能更适合此任务。谢谢您的回复,我将尝试实施并返回给您。@TitianCernicova Dragomir,似乎,您需要
GroupBy
吗?也许你可以发布自己的答案。@TitianCernicova Dragomir这是真的。然而,
字典
对大多数读者来说是很熟悉的,而查找通常需要一些阅读。@dasblinkenlight-True,这两种解决方案都很好,这就是为什么我没有发布我自己的答案,这只是一个建议。