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

标签 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 = '4' 则获取所有结果,然后将其添加到 PersonsID4 列表 或者如果 ID = '5' 添加到 PersonsID5 列表

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

如果有问题,请直接。

最佳答案

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

关于c# - 获取分组依据的结果并添加到多个列表c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47511014/

相关文章:

c# - 序列化字符串的 Web API 验证

c# - LINQ to List<T> 给出错误

c# - 这两个 LINQ 查询有什么区别?

javascript - 如何使用 JavaScript 以跨浏览器的方式将 DOM 序列化为 XML 文本?

jquery:如何转义字符串?

python - 如何从单个流中解析多个 XML 文档?

c# - 如何返回一天的结果?

c# - LINQ 扩展方法是否保证保留顺序?

c# - Unity中协程的异常处理

c# - 为什么我的 Resharper NUnit session 停止工作,但在 Debug模式下工作