我有以下两节课:

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.PropertyList并缓存其他属性值并将其插入到MyData2列表中来做到这一点,如下所示:

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()完成该工作:

 var myData2List = myData.PropertyList
                         .Select(x => new MyData2 {
                             PropertyA = x,
                             PropertyB = myData.PropertyB,
                             PropertyC = myData.PropertyC })
                         .ToList();

10-08 11:10