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);

Tags:

C#

Linq