using System; using System.Collections.Generic; using System.Linq; namespace LinqCatch { internal class Program { private static IEnumerable LoadDataOrginal() { return new List {new Person("afa"), new Person("adfa")}; } private static IEnumerable LoadDataRefactored() { return new List {new Animal("afa"), new Animal("adfa")}; } private static void Main(string[] args) { new Program().Run(); Console.Read(); } private void Run() { LinqQueryOriginal(); LinqLambda(); LinqQueryRefactored(); } private void LinqQueryOriginal() { IEnumerable listOfEntities = LoadDataOrginal(); // First version of the query var allV1 = from p in listOfEntities where p.Name.Contains("a") select p; // Second version of the query var allV2 = from Person p in listOfEntities where p.Name.Equals("a") select p; PrintAll(allV1); PrintAll(allV2); } private void LinqQueryRefactored() { IEnumerable listOfEntities = LoadDataRefactored(); // First version of the query var allV1 = from p in listOfEntities where p.Name.Contains("a") select p; // same as var allV1_ = listOfEntities.Where(p => p.Name.Contains("a")); // Second version of the query var allV2 = from Person p in listOfEntities where p.Name.Equals("a") select p; // same as var allV2_ = listOfEntities.Cast().Where(p => p.Name.Equals("a")); PrintAll(allV1); PrintAll(allV2); } private void LinqLambda() { IEnumerable listOfEntities = LoadDataRefactored(); // First version of the query var allV1 = listOfEntities.Where(p => p.Name.Contains("a")); // Second version of the query var allV2 = listOfEntities.Cast().Where(p => p.Name.Equals("a")); PrintAll(allV1); PrintAll(allV2); } private void PrintAll(IEnumerable anyThing) { foreach (var thing in anyThing) { Console.Out.WriteLine(thing); } } } internal class Person { public Person(string name) { Name = name; } public string Name { get; set; } public override string ToString() { return string.Format("Name: {0}", Name); } } internal class Animal { public Animal(string name) { Name = name; } public override string ToString() { return string.Format("Name: {0}", Name); } public string Name { get; set; } } }