Операции LINQ: необходимый код
LINQ --- LINQ to Objects --- Отложенные операции
Чтобы кодировать и выполнять примеры из данного раздела, следует помнить об использовании директивы 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);
}
}