Projection in LINQ C# with the Select operator
December 11, 2015 1 Comment
You can use the Select() extension method in LINQ to create an output of type T from an input sequence of type other than T. Let’s see some examples:
Source data:
string[] bands = { "ACDC", "Queen", "Aerosmith", "Iron Maiden", "Megadeth", "Metallica", "Cream", "Oasis", "Abba", "Blur" , "Chic", "Eurythmics", "Genesis", "INXS", "Midnight Oil", "Kent", "Madness", "Manic Street Preachers", "Noir Desir", "The Offspring", "Pink Floyd", "Rammstein", "Red Hot Chili Peppers", "Tears for Fears", "Deep Purple", "KISS"};
Say you want to collect the lengths of each string in the array:
IEnumerable<int> lengths = bands.Select(b => b.Length); foreach (int l in lengths) { Console.WriteLine(l); }
You can also project to a sequence of anonymous objects…:
var customObjects = bands.Select(b => new { Name = b, Length = b.Length }); foreach (var item in customObjects) { Console.WriteLine("Band name: {0}, length: {1}", item.Name, item.Length); }
…or to different concrete objects:
public class Band { public string Name { get; set; } public int NameLength { get; set; } public string AllCapitals { get; set; } }
…
IEnumerable<Band> bandList = bands.Select(b => new Band() { AllCapitals = b.ToUpper(), Name = b, NameLength = b.Length }); foreach (Band band in bandList) { Console.WriteLine(string.Concat(band.Name, ", ", band.NameLength, ", ", band.AllCapitals)); }
An overload of Select() allows us to read an index value:
public class Band { public string Name { get; set; } public int NameLength { get; set; } public string AllCapitals { get; set; } public int BandIndex { get; set; } }
…
IEnumerable<Band> bandList = bands.Select((b, i) => new Band() { AllCapitals = b.ToUpper(), BandIndex = i + 1, Name = b, NameLength = b.Length }); foreach (Band band in bandList) { Console.WriteLine(string.Concat(band.BandIndex, ": ", band.Name, ", ", band.NameLength, ", ", band.AllCapitals)); }
You can view all LINQ-related posts on this blog here.
Pingback: Projection in LINQ C# with the Select operator | Dinesh Ram Kali.