如何按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
相关产品推荐
相关产品推荐

