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

时间:2017-11-27 12:27:50

标签: 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<Person>),Root);
    persons = (List<Person>)deserializer.Deserialize(reader);
}

我的XML文件

   <PersonList>
      <Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <ID>4</ID>
          <Name>dasdas</Name>
          <Address>asdasd</Address>
          <Number>40</Number>
       </Person>
   </PersonList>

我希望按每个ID分组,因此如果ID =&#39; 4&#39;则获取所有结果然后将其添加到PersonsID4列表中 或者如果ID =&#39; 5&#39;添加到PersonsID5列表

var test = persons.GroupBy(u => u.ID).Select(p => p.ToList()).ToList();
personslist4 = test;

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

1 个答案:

答案 0 :(得分:1)

GroupBy之后要做的一件事是构建一个将ID映射到项目列表的Dictionary

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);
}