使用Linq将包含旧数据的列表转换为新列表

本文关键字:列表 新列表 转换 使用 包含旧 数据 Linq | 更新日期: 2023-09-27 18:22:31

我从遗留应用程序获得以下数据:

Id = 1
Name = Test 1
Id = 2
Name = Test 2#;10#;Test 3#;11#; Test 4#;12 // This simulates a multiple values field in legacy system

我想以以下格式进行转换,在上面获得多个值字段,并在记录中进行转换。上面Id为2的项目必须生成3条记录

Id = 1
Name = Test 1
Id = 2
Name = Test 2
Id = 2
Name = Test 3
Id = 2
Name = Test 4

即,我想要的是转换现在只出现在一个字段中的内容,该字段具有多个与#连接的值;在一个有几个记录的列表中。使用Linq有可能吗?

我试图用下面的代码来解决

var list = lista.Select(x => x.Name.Split(new string[] { "#;" }, System.StringSplitOptions.None)
.Where(xa => !int.TryParse(xa, out zeroValue))
.Select(xa => 
 new { 
      Id = x.Id, Name = xa
 })
).ToList();

这段代码返回两个数组的列表,第一个数组有1个元素,第二个数组有3个元素。数组中的项目是正确的,但我只想要一个包含所有4个项目的列表

使用Linq将包含旧数据的列表转换为新列表

类似于:

var result=lista.SelectMany(
    a=>Regex.Split(x.Name,"#;'d+#;"),(a,b)=>new {id=a.id,name=b});