Mapping a list of object models onto another list using linq
Do you mean this?
var TheListOfObjectsB = TheListObjectsA.Select(a => new ObjectB() { Prop1 = a.Prop1, Prop2 = a.Prop2 }).ToList();
List<ObjectB> TheListOfObjectsB = TheListOfObjectsA
.Select(t => new ObjectB {
Prop1 = t.Prop1,
Prop2 = t.Prop2,
}).ToList();
You have to call the ToList()
method to get a List<ObjectB>
. Otherwise, you will get an IEnumerable<ObjectB>
;
You could use ConvertAll
:
var output = listA.ConvertAll(new Converter<ObjectA, ObjectB>(ObjectAConverter));
and then define the converter:
public static ObjectB ObjectAConverter(ObjectA a)
{
var b = new ObjectB();
b.Prop1 = a.Prop1;
b.Prop2 = a.Prop2;
return b;
}
Doing it this way, and defining the converter method in a public place, means you can do this conversion any time without having to duplicate the logic.
For more brevity you could even declare the converter statically somewhere:
private static Converter<ObjectA, ObjectB> _converter =
new Converter<ObjectA, ObjectB>(ObjectAConverter);
public static Converter<ObjectA, ObjectB> ObjectAConverter { get { return _converter; } }
and then call it like this:
var output = listA.ConvertAll(TypeName.ObjectAConverter);