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

C#中将List<IEnumerable<int>>转换为List<int>的更优雅实现方案咨询

你可以直接用LINQ的SelectMany方法实现嵌套集合的展平,一步得到目标List<int>,代码可以精简为:

List<int> list = FolderRepository.GetAll()
    .Where(c => folderIds.Contains(c.Id))
    .SelectMany(x => x.Categories.Select(y => y.Id))
    .ToList();

说明

  • SelectMany 是LINQ专门用来处理嵌套序列展平的方法,直接将你原来Select得到的IEnumerable<IEnumerable<int>>类型的嵌套集合拍平为一维IEnumerable<int>,省去了手动声明临时集合、循环调用AddRange的冗余步骤。
  • 原代码Where条件中的folderIds.Any(y => y == c.Id)可以替换为folderIds.Contains(c.Id),语义更直白,可读性更高。如果是配合EF/EF Core这类ORM做数据库查询,这个写法还能直接翻译成SQL执行,避免内存中二次遍历的性能损耗。

如果不想调整原有查询的写法,也可以对已经得到的folderCategoriesIds直接做展平处理:

var folderCategoriesIds = FolderRepository.GetAll().Where(c => folderIds.Any(y => y == c.Id)).Select(x => x.Categories.Select(y => y.Id)).ToList();
List<int> list = folderCategoriesIds.SelectMany(x => x).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:06:03