Select clause

A select clause produces all other types of sequences.

A simple select clause just produces a sequence of the same type of objects as the objects in the data source:

IEnumerable<Country> sortedQuery =
    from country in countries
    orderby country.Area // Sort the elements in some new order.
    select country; // Produce a sequence of the reordered objects.

But it can also transform (project) data into sequences of new types:

var queryNameAndPop =
    from country in countries
    select new// Projects a sequence of anonymous types which contain
    { // only a subset of the fields in the original element.
        Name = country.Name,
        Pop = country.Population
    };

foreach (var item in queryNameAndPop) 
{
    // item.Name, item.Pop
}

Another example:

double[] radii = { 1, 2, 3 };

IEnumerable<string> output =
    from rad in radii
    select $"Area for circle with radius {rad} = {rad * rad * Math.PI:F2}";

// Or, in method syntax:
IEnumerable<string> output =
    radii.Select(rad => $"Area for circle with radius {rad} = {rad * rad * Math.PI:F2}";

foreach (string s in output)
    Console.WriteLine(s);