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

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

我有以下两个班:

1
2
3
4
5
6
7
8
9
10
11
class MyData {
  public List<string> PropertyList { get; private set;}
  public string PropertyB { get; set; }
  public string PropertyC { get; set; }
}

class MyData2 {
  public string PropertyA { get; set;}
  public string PropertyB { get; set; }
  public string PropertyC { get; set; }
}

如果我有MyClass的实例,我需要将其转换为MyData2的列表。我可以通过循环mydata.property list并缓存其他属性值,然后将它们插入mydata2的列表中,如下所示:

1
2
3
4
5
6
7
string propertyB = myData.PropertyB;
string propertyC = myData.PropertyC;
List<MyData2> myData2List = new List<MyData>();
foreach(string item in myData.PropertyList)
{
  myData2List.Add(new myData2() { item, propertyB, propertyC });
}

不确定这是否可以用Linq或lambda表达式的.NET 3.5功能来完成?


很好也很容易。您希望基于特定列表中的每个项(字符串)执行某些操作,因此请将其作为查询表达式的起点。您希望为每个字符串创建一个新项(MyData2),因此使用投影。您希望在末尾创建一个列表,因此您可以调用ToList()来完成该作业:

1
2
3
4
5
6
 var myData2List = myData.PropertyList
                         .Select(x => new MyData2 {
                             PropertyA = x,
                             PropertyB = myData.PropertyB,
                             PropertyC = myData.PropertyC })
                         .ToList();