Extension Method: ================= public static class MyExtension { public static IEnumerable ToUpper(this IEnumerable source) { foreach (string s in source) { Console.WriteLine("Yield returning: {0}", s); yield return s.ToUpper(); } } } Iteration Code: =============== string[] sa = new[] { "aaa", "Bbb", "CCc" }; Console.WriteLine("Before using ToUpper()"); var sb = sa.ToUpper(); Console.WriteLine("After using ToUpper()"); Console.WriteLine("Before iterating the collection in sb"); foreach (string s in sb) Console.WriteLine("Within iteration, s: {0}", s); Chained Queries: ================ string[] sa = new[] { "#33", "#22", "% this is text", "#18" }; var justNumbersAsStrings = from s in sa where s.StartsWith("#") select s.Substring(1); var numbersAsInts = from j in justNumbersAsStrings select Int32.Parse(j); var sum = numbersAsInts.Sum(); Console.WriteLine(sum);