One example to find out number of years of oldest child in a list of parents.
using System;
using System.Collections.Generic;
using System.Linq;

namespace LINQtest
{

    public class Child
    {
        public int Age { get; set; }
    }

    public class Parent
    {
        public Child[] Kids { get; set; }
    }

    public class MyLinq
    {
        public List<Parent> Parents { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Parent parentOne = new Parent();
            parentOne.Kids = new Child[2];

            parentOne.Kids[0] = new Child();
            parentOne.Kids[0].Age = 1;

            parentOne.Kids[1] = new Child();
            parentOne.Kids[1].Age = 2;

            Parent parentTwo = new Parent();
            parentTwo.Kids = new Child[3];
            parentTwo.Kids[0] = new Child();
            parentTwo.Kids[0].Age = 5;
            parentTwo.Kids[1] = new Child();
            parentTwo.Kids[1].Age = 7;
            parentTwo.Kids[2] = new Child();
            parentTwo.Kids[2].Age = 6;

            Parent parentThree = new Parent();
            parentThree.Kids = new Child[2];
            parentThree.Kids[0] = new Child();
            parentThree.Kids[0].Age = 3;

            parentThree.Kids[1] = new Child();
            parentThree.Kids[1].Age = 4;

            MyLinq myLinq = new MyLinq();
            myLinq.Parents = new List();
            myLinq.Parents.Add(parentOne);
            myLinq.Parents.Add(parentTwo);
            myLinq.Parents.Add(parentThree);

            int maxAge = myLinq.Parents.Max(parent => parent.Kids.Max(kid => kid.Age));

            Console.WriteLine("Oldest kid is age of: " + maxAge);
            Console.WriteLine("Press any key");
            Console.ReadKey();
        }
    }
}

POI:

int maxAge = myLinq.Parents.Max(parent => parent.Kids.Max(kid => kid.Age));

Because for example code:

IEnumerable<int> maxAges = myLinq.Parents.Select(parent => parent.Kids.Max(kid => kid.Age));

Will return collection of ages in list of parents.

One my example of interpolated string (taken from here):

string name = "stanko";
DateTime hours = DateTime.Now;
Console.WriteLine($"Name = {name}, hours = {hours:hh}");
Console.ReadKey();

Composite string:

string name = "stanko";
Console.WriteLine("Name = {0}, hours = {1:hh}", name, DateTime.Now);
Console.ReadKey();

According to Microsoft:

Interpolated string are easier to understand than a composite format string. 

To assign IEnumerable to a new instance of IEnumerable, you will need ToList method. Here is an example:

IEnumerable instanceOne;
IEnumerable instanceTwo;

List instanceListOne = new List();

instanceListOne.Add("a");
instanceListOne.Add("b");

instanceOne = instanceListOne;
instanceTwo = instanceOne;

instanceListOne.Add("c");

foreach (string instance in instanceTwo)
{
	Console.WriteLine(instance);
}

Console.WriteLine("Press any key");
Console.ReadKey();

instanceTwo = instanceOne.ToList();
instanceListOne.Add("d");

foreach (string instance in instanceTwo)
{
	Console.WriteLine(instance);
}

Console.WriteLine("Press any key");
Console.ReadKey();

Notice first:

instanceListOne.Add("a");
instanceListOne.Add("b");

instanceOne = instanceListOne;
instanceTwo = instanceOne;

Then:

instanceListOne.Add("c");

I added firs "a" and "b" to instanceListOne, I assigned instanceListOne to instanceOne, and then I assigned instanceOne to instanceTwo, after that I added "c" to instanceListOne, then I went through instanceTwo and result is:

 

"c" is displayed also in instanceTwo.

Now to have two separate instances of IEnumerable, we need something like:

instanceTwo = instanceOne.ToList();

After that I did something like:

instanceListOne.Add("d");

Result will be still as in previous picture, "d" is not added to instanceTwo, since now we really have separate instances.

Example download from here.

IComparer example, with numbers first, and empty strings at the end:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace IComparer
{
    class Program
    {
        public class myCaseInsensitiveComparer : IComparer
        {
            public int Compare(string x, string y)
            {
                bool isXnumeric = int.TryParse(x, out var xInt);
                bool isYnumeric = int.TryParse(y, out var yInt);

                if (string.IsNullOrWhiteSpace(x) && string.IsNullOrWhiteSpace(y))
                {
                    return 0;
                }

                if (string.IsNullOrWhiteSpace(x))
                {
                    return 1;
                }

                if (string.IsNullOrWhiteSpace(y))
                {
                    return -1;
                }

                if (isXnumeric && isYnumeric)
                {
                    return xInt.CompareTo(yInt);
                }

                return string.Compare(x, y, StringComparison.OrdinalIgnoreCase);
            }
        }

        static void Main(string[] args)
        {
            string[] words = { "1", "a", "A", "", "b", "", "B", "C", "c", "", "", "3" };
            IOrderedEnumerable sortedWords = words.OrderBy(a => a, new myCaseInsensitiveComparer());

            foreach (var sortedWord in sortedWords)
            {
                Console.WriteLine(sortedWord);
            }

            Console.WriteLine("Press any key...");
            Console.ReadKey();
        }
    }
}

Result should be something like:

Source you can download from here.