Csharp/CSharp Tutorial/LINQ/ToLookup

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Call ILookUp returned from ToLookup to get the IEnumerable

<source lang="csharp">using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee {

   public string birthYear;
   public string firstName;
   public string lastName;
   public static Employee[] GetEmployees() {
       Employee[] actors = new Employee[] {
     new Employee { birthYear = "1964", firstName = "K", lastName = "R" },
     new Employee { birthYear = "1968", firstName = "O", lastName = "W" },
     new Employee { birthYear = "1960", firstName = "J", lastName = "S" },
     new Employee { birthYear = "1965", firstName = "S",lastName = "B" },
   };
      return (actors);
   }

} public class MyStringifiedNumberComparer : IEqualityComparer<string> {

   public bool Equals(string x, string y) {
       return (Int32.Parse(x) == Int32.Parse(y));
   }
   public int GetHashCode(string obj) {
       return Int32.Parse(obj).ToString().GetHashCode();
   }

} public class MainClass {

   public static void Main() {
       ILookup<string, string> lookup = Employee.GetEmployees()
         .ToLookup(k => k.birthYear,a => string.Format("{0} {1}", a.firstName, a.lastName),new MyStringifiedNumberComparer());
       IEnumerable<string> actors = lookup["1965"];
       foreach (var actor in actors)
           Console.WriteLine("{0}", actor);
   }

}</source>

ToLookup Demo

<source lang="csharp">using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee {

   public string birthYear;
   public string firstName;
   public string lastName;
   public static Employee[] GetActors() {
       Employee[] actors = new Employee[] {
     new Employee { birthYear = "1964", firstName = "K", lastName = "R" },
     new Employee { birthYear = "1968", firstName = "O", lastName = "W" },
     new Employee { birthYear = "1960", firstName = "J", lastName = "S" },
     new Employee { birthYear = "1964", firstName = "S",lastName = "B" },
   };
       return (actors);
   }

} public class MyStringifiedNumberComparer : IEqualityComparer<string> {

   public bool Equals(string x, string y) {
       return (Int32.Parse(x) == Int32.Parse(y));
   }
   public int GetHashCode(string obj) {
       return Int32.Parse(obj).ToString().GetHashCode();
   }

} public class MainClass {

   public static void Main() {
       ILookup<string, Employee> lookup = Employee.GetActors()
         .ToLookup(k => k.birthYear, new MyStringifiedNumberComparer());
       IEnumerable<Employee> actors = lookup["1968"];
       foreach (var actor in actors)
           Console.WriteLine("{0} {1}", actor.firstName, actor.lastName);
   }

}</source>

ToLookup with int and string

<source lang="csharp">using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee {

   public int birthYear;
   public string firstName;
   public string lastName;
   public static Employee[] GetEmployees() {
       Employee[] actors = new Employee[] {
      new Employee { birthYear = 1964, firstName = "K", lastName = "R" },
      new Employee { birthYear = 1968, firstName = "O", lastName = "W" },
      new Employee { birthYear = 1960, firstName = "J", lastName = "S" },
      new Employee { birthYear = 1964, firstName = "S", lastName = "B" },
   };
       return (actors);
   }

} public class MainClass {

   public static void Main() {
       ILookup<int, string> lookup = Employee.GetEmployees()
         .ToLookup(k => k.birthYear,
                   a => string.Format("{0} {1}", a.firstName, a.lastName));
       IEnumerable<string> actors = lookup[1964];
       foreach (var actor in actors)
           Console.WriteLine("{0}", actor);
   }

}</source>

Use ToLookup to search object property

<source lang="csharp">using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee {

   public int birthYear;
   public string firstName;
   public string lastName;
   public static Employee[] GetEmployees() {
       Employee[] actors = new Employee[] {
      new Employee { birthYear = 1964, firstName = "K", lastName = "R" },
      new Employee { birthYear = 1968, firstName = "O", lastName = "W" },
      new Employee { birthYear = 1960, firstName = "J", lastName = "S" },
      new Employee { birthYear = 1964, firstName = "S", lastName = "B" },
   };
       return (actors);
   }

} public class MainClass {

   public static void Main() {
       ILookup<int, Employee> lookup = Employee.GetEmployees().ToLookup(k => k.birthYear);
       IEnumerable<Employee> actors = lookup[1964];
       foreach (var actor in actors)
           Console.WriteLine("{0} {1}", actor.firstName, actor.lastName);
   }

}</source>