using System.Collections.Generic;
public string Name {get;set;}
public string Breed {get;set;}
public int Age {get;set;}
public string Owner {get;set;}
public static void Main()
var spike = new Dog() {Name="Spike",Breed="Jack Russell", Age=5, Owner="Ben"};
var tinka = new Dog() {Name="Tinka",Breed="Eskie", Age=5,Owner="John"};
var petey = new Dog() {Name="Petey",Breed="Eskie", Age=8,Owner="John"};
var mocha = new Dog() {Name="Mocha",Breed="Pom", Age=9,Owner="Jessica"};
var kennel = new List<Dog>();
kennel.ForEach(dog => Console.WriteLine(dog.Name));
var snowball =new Dog() {Name="Snowball",Breed="Westie", Age=15, Owner="Bill"};
kennel.Contains(snowball).P();
kennel.Contains(tinka).P();
kennel.Where(dog => dog.Breed.Equals("Eskie")).ForEach(dog => dog.Name.P());
kennel.Where(dog => dog.Age > 7).ForEach(dog => dog.P());
kennel.Select(dog => dog.Breed).ForEach(dog => dog.P());
kennel.Select(dog => new {OwnerName = dog.Owner, DogName = dog.Name}).ForEach(newType => newType.P());
kennel.Single(dog => dog.Breed.Equals("Jack Russell")).Name.P();
kennel.Single(dog => dog.Breed.Equals("Eskie"));
(kennel.SingleOrDefault(dog => dog.Breed.Equals("Whippet"))==null).P();
kennel.Select(dog => dog.Breed).Distinct().ForEach(dogBreed => dogBreed.P());
kennel.OrderBy(dog => dog.Name).Select(dog => dog.Name).ForEach(dogName => dogName.P());
kennel.Average(dog => dog.Age).P();
kennel.Sum(dog => dog.Age).P();
kennel.Select(dog => dog.Name).Aggregate((currentDogName,nextDogName) => string.Format("{0}, {1}",currentDogName,nextDogName)).P();
public static class Extensions
public static void ForEach<T>(this IEnumerable<T> collection, Action<T> action)
foreach(var item in collection)
public static void P(this object obj)
Console.WriteLine(obj.ToString());