Исходный код для примеров LINQ to DataSet

Для выполнения примеров из данного раздела понадобится добавить в проект ссылки на динамические библиотеки сборок System.Data.dll и System.Data.DataSetExtensions, если это не было сделано ранее.

Чтобы использовать операции LINQ to DataSet, добавьте в начало кода директивы using для пространств имен System.Linq и System.Data, если это еще не сделано:

using System.Data; 
using System.Linq;

Это позволит коду находить операции LINQ to DataSet.

Общий код для примеров

Почти каждый пример из данного раздела потребует объекта DataTable, чтобы выполнять запросы LINQ to DataSet. В реальном рабочем коде вы обычно будете получать объекты DataTable, опрашивая базу данных. Однако для некоторых примеров будут представлены ситуации, когда условий данных из типичной базы будет недостаточно. Например, понадобятся дублированные записи для демонстрации метода Distinct. Вместо того чтобы пытаться манипулировать базой данных для получения нужной информации, будет просто программно создаваться объект DataTable, содержащий определенные данные, которые понадобятся для примера. Это также избавит от необходимости иметь специальную базу данных для тестирования большинства примеров.

Поскольку для получения объектов DataTable база данных опрашиваться не будет, и для того, чтобы облегчить создание этих объектов, они будут генерироваться из массива объектов предопределенных классов. В качестве предопределенного класса используется приведенный ниже класс Student:

class Student
    {
        public int Id;
        public string Name;
    }

Нужно просто представить, что опрашивается таблица по имени Students, в которой каждая запись представляет студента, и эта таблица состоит из двух столбцов: Id и Name.

Чтобы облегчить создание базы данных DataTable, а также предотвратить неясности в существенных деталях каждого примера, используется общий метод для преобразования массива объектов Student в объект DataTable. Это позволит легко варьировать данные от примера к примеру. Вот этот общий метод:

static DataTable GetDataTable(Student[] students)
        {
            DataTable table = new DataTable(); 
            table.Columns.Add("Id", typeof(Int32)); 
            table.Columns.Add("Name",typeof(string));
            foreach (Student student in students)
            {
                table.Rows.Add(student.Id, student.Name);
            }
            return (table);
        }

В этом методе нет ничего сложного. Здесь просто создается экземпляр объекта DataTable, в который добавляются два столбца и затем добавляются строки для всех элементов в переданном массиве students.

Для многих примеров применения операций LINQ to DataSet понадобится отображать DataTable, чтобы показать результаты работы кода. Хотя реальные данные в DataTable будут варьироваться, код, необходимый для отображения заголовка объекта DataTable, останется неизменным. Вместо многократного повторения этого кода во всех примерах создается следующий метод, который будет вызываться в каждом примере, где требуется выводить заголовок DataTable:

static void OutputDataTableHeader(DataTable dt, int columnWidth)
        {
            string format = string.Format("{0}0,-{1}{2}", "{", columnWidth, "}");  

            // Отображение заголовков столбцов.
            foreach (DataColumn column in dt.Columns)
            {
                Console.Write(format, column.ColumnName);
            }
            Console.WriteLine();
            foreach (DataColumn column in dt.Columns)
            {
                for (int i = 0; i < columnWidth; i++)
                {
                    Console.Write("=");
                }

            }
            Console.WriteLine();
        }

Назначение этого метода — вывести заголовок DataTable в табличной форме.

Лучший чат для C# программистов