关于c#:使用Lambda或LINQ将类列表转换或映射到另一个类列表?

Convert or map a list of class to another list of class by using Lambda or LINQ?

将一个类转换为另一个类列表的问题和答案很酷。如何将mydata列表转换为另一个mydata2列表?例如:

1
2
3
4
5
List<MyData> list1 = new List<MyData>();
// somewhere list1 is populated
List<MyData2> list2;
// Now I need list2 from list1. How to use similar LINQ or Lambda to get
list2 = ... ?

我在这里尝试过,但我无法找出完整的代码:

1
2
3
4
5
6
7
list2 = (from x in list1 where list1.PropertyList == null
    select new MyData2( null, x.PropertyB, x.PropertyC).
    Union (
      from y in list1 where list.PropertyList != null
      select new MyData2( /* ? how to loop each item in ProperyList */
              y.PropertyB, y.PropertyC)
    ).ToList();

其中mydata2具有类似于ctor的(字符串、字符串、字符串)。


如果这两种类型不同,您将使用相同的选择映射到新列表。

1
2
3
4
5
6
list2 = list1.Select( x => new MyData2()
                                  {
                                     //do your variable mapping here
                                     PropertyB = x.PropertyB,
                                     PropertyC = x.PropertyC
                                  } ).ToList();

编辑以添加:

既然你改变了你的问题。你可以这样做来修正你想做的事情。

1
2
3
4
5
6
7
8
9
10
11
list2 = list1.Aggregate(new List<MyData2>(),
                 (x, y) =>
                {
                    if (y.PropertyList == null)
                    x.Add(new MyData2(null, y.PropertyB, y.PropertyC));
                    else
                    x.AddRange(y.PropertyList.Select(z => new MyData2(z, y.PropertyB, y.PropertyC)));

                        return x;
                }
            );


1
list2 = list1.ConvertAll<MyData>( a => a.MyConversion() )