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

如何按Type字段拆分List<List<TestData>>类型的嵌套列表?

问题:将分组筛选后的嵌套列表整合为List<List<List<TestData>>>

你有如下结构的List<List<TestData>>类型数据:

List<List<TestData>> DatabaseList = new List<List<TestData>>();
List<TestData> DatabaseList1 = new List<TestData>();
List<TestData> DatabaseList2 = new List<TestData>();
List<TestData> DatabaseList3 = new List<TestData>();

DatabaseList1.Add(new TestData { Balance = 10, Name = "Data1 1", Type = "A" });
DatabaseList1.Add(new TestData { Balance = 20, Name = "Data1 2", Type = "A" });
DatabaseList1.Add(new TestData { Balance = 30, Name = "Data1 3", Type = "B" });

DatabaseList2.Add(new TestData { Balance = 100, Name = "Data2 1", Type = "A" });
DatabaseList2.Add(new TestData { Balance = 200, Name = "Data2 2", Type = "A" });
DatabaseList2.Add(new TestData { Balance = 300, Name = "Data2 3", Type = "B" });

DatabaseList3.Add(new TestData { Balance = 1000, Name = "Data3 1", Type = "A" });
DatabaseList3.Add(new TestData { Balance = 2000, Name = "Data3 2", Type = "A" });
DatabaseList3.Add(new TestData { Balance = 3000, Name = "Data3 3", Type = "B" });

DatabaseList.Add(DatabaseList1);
DatabaseList.Add(DatabaseList2);
DatabaseList.Add(DatabaseList3);

你尝试了以下代码分别筛选Type为"A"和"B"的数据:

var dat1 = DatabaseList.Select(a => a.Where(c=>c.Type == "A")).ToList();
var dat2 = DatabaseList.Select(a => a.Where(c=>c.Type == "B")).ToList();

但得到的是两个独立的列表,想要将这两个结果整合到一个List<List<List<TestData>>>类型的SplitList中。


解决方案

方法1:基于已有结果直接整合

注意:Where方法返回的是IEnumerable<TestData>,需要先转为List<TestData>再整合:

// 先将筛选结果转为List<TestData>类型
var dat1 = DatabaseList.Select(a => a.Where(c=>c.Type == "A").ToList()).ToList();
var dat2 = DatabaseList.Select(a => a.Where(c=>c.Type == "B").ToList()).ToList();

// 初始化目标列表并添加两个筛选结果
List<List<List<TestData>>> SplitList = new List<List<List<TestData>>>();
SplitList.Add(dat1);
SplitList.Add(dat2);

方法2:一步完成筛选与整合

不需要单独定义dat1和dat2,直接通过集合初始化器生成目标结构:

var SplitList = new List<List<List<TestData>>>
{
    DatabaseList.Select(list => list.Where(item => item.Type == "A").ToList()).ToList(),
    DatabaseList.Select(list => list.Where(item => item.Type == "B").ToList()).ToList()
};

方法3:支持扩展多类型筛选(可选)

如果后续需要筛选更多Type类型(如"C"、"D"),可以用批量处理的方式减少重复代码:

// 指定需要筛选的Type集合
var targetTypes = new[] { "A", "B" };

// 批量生成各类型的筛选结果并整合
var SplitList = targetTypes
    .Select(type => DatabaseList
        .Select(list => list.Where(item => item.Type == type).ToList())
        .ToList())
    .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:32:27