Russ Bradberry
Russ Bradberry

Reputation: 10875

Linq Select Certain Properties Into Another Object?

So say I have a collection of Bloops

Class Bloop
  Public FirstName
  Public LastName
  Public Address
  Public Number
  Public OtherStuff
End Class

Then I have a class of Razzies

Class Razzie
  Public FirstName
  Public LastName
End Class

Is it possible using Linq to select the FirstName and LastName out of all the Bloops in the collection of Bloops and return a collection of Razzies? Or am i limited to a For-Loop to do my work?

To clear up any confusion, either VB or C# will do. Also this will probably lead to me asking the question of (What about using a "Where" clause).

Upvotes: 29

Views: 55908

Answers (5)

KClough
KClough

Reputation: 2089

List<Bloop> myBloops = new List<Bloops>;
//populate myRazzies
List<Razzie> myRazzies = myBloops.Select(x => new Razzie() { FirstName = x.FirstName, LastName = x.LastName}).ToList();

Upvotes: 46

Md Saidul Karim
Md Saidul Karim

Reputation: 1

        C# Sample - Thanks to earlier posters.

        List<clsObj> myList = new List<clsObj>();
        clsObj clsObjInstance = null;
        for (int i = 0; i < 10; i++)
        {
            clsObjInstance = new clsObj() { x = (i+1) % 3, a = "A" + i.ToString() };
            myList.Add(clsObjInstance);
        }

        List<int> extIntList = myList.Select(u => u.x).ToList();
        foreach (int u in extIntList)
            Console.Write(u.ToString() + "\t");

        List<string> extStringList = myList.Select(u => u.a).ToList();
        foreach (string u in extStringList)
            Console.Write(u + "\t");

Upvotes: 0

nologo
nologo

Reputation: 6328

public void Linq9()
{
    string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };

    var upperLowerWords =
        from w in words
        select new { Upper = w.ToUpper(), Lower = w.ToLower() };

    foreach (var ul in upperLowerWords)
    {
        Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);
    }
}

Upvotes: 2

Noldorin
Noldorin

Reputation: 147471

This should do the job:

Dim results = From item In bloops _
              Select New Razzie() With _
              { _
                  .FirstName = item.FirstName, _
                  .LastName = item.LastName _
              }

And if you want to convert the result from IEnumerable<Bloop> (what the LINQ query returns) to an array or List<Bloop>, just append a call to the ToArray() or ToList() extension methods respectively.

Edit: Corrected the code so that it now has valid VB.NET 9 syntax.

Upvotes: 29

Amy B
Amy B

Reputation: 110221

Transforming from one type into another can be accomplished by using Enumerable.Select

In fact, there is a sample from 101 linq samples that shows a query transforming ints into strings.

Upvotes: 0

Related Questions