Операции LINQ: необходимый код

Чтобы кодировать и выполнять примеры из данного раздела, следует помнить об использовании директивы using со всеми необходимыми пространствами имен, ссылках на все нужные сборки, а также на общий код, разделяемый примерами.

Необходимые пространства имен

В примерах этого раздела будут использоваться пространства имен System.Linq, System.Collections, System.Collections.Generic и System.Data.Linq. Поэтому потребуется добавить в код следующие директивы using, если их еще там нет:

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

Также, в дополнение к этим пространствам имен также добавлена директива using для пространства имен System.Diagnostics. Это не является необходимым для примеров из этого раздела. Это понадобится только для сопровождающего кода — из-за некоторого добавленного рабочего кода.

Необходимые сборки

В дополнение к типичным сборкам потребуется установить ссылку на сборку System.Data.Linq.dll.

Общие классы

В нескольких примерах этого раздела понадобятся классы — для всесторонней демонстрации поведения той или иной операции. Ниже приведен список классов, которые будут использоваться в более чем одном примере.

Класс Employee представляет сотрудника. Для удобства он содержит статические методы, возвращающие ArrayList или массив сотрудников:

public class Employee
  {
    public int id;
    public string firstName;
    public string lastName;

    public static ArrayList GetEmployeesArrayList()
    {
      ArrayList al = new ArrayList();

      al.Add(new Employee { id = 1, firstName = "Joe", lastName = "Rattz" });
      al.Add(new Employee { id = 2, firstName = "William", lastName = "Gates" });
      al.Add(new Employee { id = 3, firstName = "Anders", lastName = "Hejlsberg" });
      al.Add(new Employee { id = 4, firstName = "David", lastName = "Lightman" });
      al.Add(new Employee { id = 101, firstName = "Kevin", lastName = "Flynn" });
      return (al);
    }

    public static Employee[] GetEmployeesArray()
    {
      return ((Employee[])GetEmployeesArrayList().ToArray(typeof(Employee)));
    }
  }

Класс EmployeeOptionEntrу представляет присуждение опционов на акции определенному сотруднику. Для удобства он содержит статический метод, возвращающий список назначенных опционов:

public class EmployeeOptionEntry
  {
    public int id;
    public long optionsCount;
    public DateTime dateAwarded;

    public static EmployeeOptionEntry[] GetEmployeeOptionEntries()
    {
      EmployeeOptionEntry[] empOptions = new EmployeeOptionEntry[] {
        new EmployeeOptionEntry { 
          id = 1, 
          optionsCount = 2, 
          dateAwarded = DateTime.Parse("1999/12/31") },
        new EmployeeOptionEntry { 
          id = 2, 
          optionsCount = 10000, 
          dateAwarded = DateTime.Parse("1992/06/30")  },
        new EmployeeOptionEntry { 
          id = 2, 
          optionsCount = 10000, 
          dateAwarded = DateTime.Parse("1994/01/01")  },
        new EmployeeOptionEntry { 
          id = 3, 
          optionsCount = 5000, 
          dateAwarded = DateTime.Parse("1997/09/30") },
        new EmployeeOptionEntry { 
          id = 2, 
          optionsCount = 10000, 
          dateAwarded = DateTime.Parse("2003/04/01")  },
        new EmployeeOptionEntry { 
          id = 3, 
          optionsCount = 7500, 
          dateAwarded = DateTime.Parse("1998/09/30") },
        new EmployeeOptionEntry { 
          id = 3, 
          optionsCount = 7500, 
          dateAwarded = DateTime.Parse("1998/09/30") },
        new EmployeeOptionEntry { 
          id = 4, 
          optionsCount = 1500, 
          dateAwarded = DateTime.Parse("1997/12/31") },
        new EmployeeOptionEntry { 
          id = 101, 
          optionsCount = 2, 
          dateAwarded = DateTime.Parse("1998/12/31") }
      };

      return (empOptions);
    }
  }

Для реализации некоторых примеров понадобится класс, который сможет хранить записи с не уникальными ключами. Для этой цели создан класс Actor, приведенный ниже. Его член birthYear используется в качестве ключа:

public class Actor
  {
    public int birthYear;
    public string firstName;
    public string lastName;

    public static Actor[] GetActors()
    {
      Actor[] actors = new Actor[] {
        new Actor { birthYear = 1964, firstName = "Keanu", lastName = "Reeves" },
        new Actor { birthYear = 1968, firstName = "Owen", lastName = "Wilson" },
        new Actor { birthYear = 1960, firstName = "James", lastName = "Spader" },
        new Actor { birthYear = 1964, firstName = "Sandra", lastName = "Bullock" },
      };

      return (actors);
    }
  }