convertir una lista de objetos de un tipo a otro mediante una expresión lambda

Tengo un bucle foreach que lee una lista de objetos de un tipo y produce una lista de objetos de un tipo diferente. Me dijeron que una expresión lambda puede lograr el mismo resultado.

var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>(); 

foreach(OrigType a in origList) {
    targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}

Cualquier ayuda sería apreciada- i'm nuevo en lambda y linq Gracias s

Pruebe lo siguiente

var targetList = origList
  .Select(x => new TargetType() { SomeValue = x.SomeValue })
  .ToList();

Esta es una combinación de Lambdas y LINQ para lograr la solución. La función Select es un método de tipo proyección que aplicará el delegado pasado (o lambda en este caso) a cada valor de la colección original. El resultado se devolverá en un nuevo IEnumerable. La llamada .ToList es un método de extensión que convertirá este IEnumerable en un List.

Comentarios (1)

Si sabes que quieres convertir de List a List entonces List.ConvertAll será ligeramente más eficiente que Select/ToList porque sabe el tamaño exacto con el que empezar:

target = orig.ConvertAll(x => new TargetType { SomeValue = x.SomeValue });

En el caso más general de que sólo conozcas el origen como un IEnumerable, usar Select/ToList es la mejor opción. También se podría argumentar que en un mundo con LINQ, es más idiomático empezar con esto... pero al menos merece la pena conocer la opción ConvertAll.

Comentarios (5)

Creo que algo así debería funcionar:

origList.Select(a => new TargetType() { SomeValue = a.SomeValue});
Comentarios (1)