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

时间:2013-07-15 21:42:23

标签: c# linq

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

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();

此代码重新编译两个数组的List,第一个数组包含1个元素,第二个数组包含3.数组中的项目是正确的,但我想只有一个列表包含所有4个项目

1 个答案:

答案 0 :(得分:0)

类似的东西:

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