Mapping a list of object models onto another list using linq


I have two object models that share some properties and a list of one type that I want to use to create a list of another type. For now, I have something like this (and it works):

List<ObjectA> TheListOfObjectsA = the result of some query;
List<ObjectB> TheListOfObjectsB = new List<ObjectB>();

foreach (ObjectA TheObjectA in TheListObjectsA)
{
   ObjectB TheObjectB = new ObjectB();

   TheObjectB.Prop1 = TheObjectA.Prop1;
   TheObjectB.Prop2 = TheObjectA.Prop2;

   TheListOfObjectsB.Add(TheObjectB);
}

I'm curious if and how I could rewrite this in a linq statement without the loop (even thought we know the linq statement will be executed as a loop).



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 can use this.

var theListOfObjectsB = theListOfObjectsA
    .Select(t => new ObjectB{
        Prop1 = t.Prop1,
        Prop2 = t.Prop2,
    }).ToList();