A few LINQ examples.

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

string[] names = { "Tom", "Dick", "Harry" };

//-------------------------
// standard query operators
//-------------------------
IEnumerable<string> filteredNames = System.Linq.Enumerable.Where(names, n => n.Length >= 4);
  foreach (string n in filteredNames) {
    Console.WriteLine (n); // Dick, Harry
  }

//standard query operators
IEnumerable<string> filteredNames = names.Where (n => n.Contains ("a"));
  foreach (string name in filteredNames) {
    Console.WriteLine (name); // Harry
  }

//-------------------------
// Chaining Query Operators example
//-------------------------
IEnumerable<string> query = names
  .Where (n => n.Contains ("a"))
  .OrderBy (n => n.Length)
  .Select (n => n.ToUpper());
  
  foreach (string name in query) {
    Console.WriteLine (name); // JAY, MARY, HARRY
  }

//-------------------------
// Subqueries
//-------------------------
// A subquery is a query contained within another query's lambda expression. The
// following example uses a subquery to sort musicians by their last name:
string[] musicians = { "David Gilmour", "Roger Waters", "Rick Wright", "Nick Mason" };
IEnumerable<string> query = musicians.OrderBy (m => m.Split().Last());

  foreach (string musician in query) {
    Console.WriteLine (musician);
  }

//-------------------------
// Enumerable.Where implementation
//-------------------------
string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
IEnumerable<string> query = names.Where (name => name.EndsWith ("y"));
// Result: { "Harry", "Mary", "Jay" }

// A where clause can appear more than once in a 
// query and be interspersed with let, orderby and join clauses:
from n in names
  where n.Length > 3
  let u = n.ToUpper()
  where u.EndsWith ("Y")
  select u; // Result: { "HARRY", "MARY" }
  

//-------------------------
// Select subqueries and object hierarchies
//-------------------------
// You can nest a subquery in a select clause to build an object hierarchy. The following
// example returns a collection describing each directory under D:\source, with
// a subcollection of files under each directory:
DirectoryInfo[] dirs = new DirectoryInfo(@"d:\source").GetDirectories();

var query =
   from d in dirs
   where (d.Attributes & FileAttributes.System) == 0
   select new {
                DirectoryName = d.FullName,
                Created = d.CreationTime,
                Files = from f in d.GetFiles()
                  where (f.Attributes & FileAttributes.Hidden) == 0
                  select new {FileName = f.Name, f.Length,}
              };

foreach (var dirFiles in query) {
   Console.WriteLine("Directory: " + dirFiles.DirectoryName);
   
   foreach (var file in dirFiles.Files) {
       Console.WriteLine(" " + file.FileName + " Len: " + file.Length);
   }
}