You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ按Publication对象的Authors列表字段分组?

用LINQ实现按作者分组出版物

没问题!你原来用字典循环的逻辑完全可以用LINQ更简洁地实现,核心思路是先把每个作者和对应的出版物“展开”成一对一的条目,再分组转字典。

直接上代码:

var dict = list
    // 先把每个出版物的所有作者拆成独立的(作者, 出版物)条目
    .SelectMany(publication => publication.Authors.Select(author => new { Author = author, Publication = publication }))
    // 按作者分组
    .GroupBy(item => item.Author)
    // 转成目标字典格式:键是作者名,值是该作者的出版物列表
    .ToDictionary(group => group.Key, group => group.Select(item => item.Publication).ToList());

分步解释下每一步的作用:

  • SelectMany:替代了你原来的双层foreach循环——它会遍历每一个Publication,再遍历该出版物的每一个Author,把它们组合成一个包含作者和对应出版物的匿名对象,这样就把一对多的关系拆成了多个一对一的临时条目。
  • GroupBy:按照作者名对这些临时条目进行分组,把同一个作者的所有出版物条目聚合到一起。
  • ToDictionary:把分组后的结果转换成你需要的Dictionary<string, List<Publication>>类型,键是分组的作者名,值是从分组里提取出的所有出版物列表。

这个实现和你原来的字典逻辑完全一致:同一个作者的出版物会被收集到同一个列表里,不会遗漏任何作者-出版物的关联。

内容的提问来源于stack exchange,提问作者feigentoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:41:39