ТЕХНОЛОГИЯ LINQ. ЗАПРОСЫ К DATATABLE В C# Печать
Автор: Шапирова А.Р.   
20.05.2020 11:08


ТЕХНОЛОГИЯ LINQ. ЗАПРОСЫ К DATATABLE В C#

 

Шапирова А.Р.

БФ БашГУ, г.Бирск, РБ

 

В этой статье будут рассмотрены несколько способов создания запросов к DataTable при помощи технологии LINQ.

LINQ (Language Integrated Query — «запрос, интегрированный в язык») обеспечивает написание таких синтаксических конструкций, которые, при помощи абстрагирования общих элементов доступа к данным различных удалённых источников и локальных коллекций объектов, имели бы типизированный вид. Это отбрасывает необходимость в дополнительном изучении особенностей других языков запросов.

Стоит отметить, что воспользоваться запросами LINQ можно только в том случае, если в коллекции присутствует реализация обобщённого интерфейса IEnumerable<T> или интерфейса IQueryable<T>.

В данной статье будут рассмотрены примеры способов обращения к классу DataTable, который не реализует ни один из интерфейсов, представленных выше.


Пример 1. Имеется некая таблица под именем «People». Необходимо выделить из неё данные о месте проживания человека с помощью его идентификационного номера (id).

Подойти к решению данного примера можно с нескольких сторон.

Первый способ.

int valueId=4;

            string result = (from row in People.AsEnumerable()

                             where row.Field<int>("id") == valueId

                             select row.Field<string>("address")).Single();

Второй способ.

int valueId = 4;

            string result = People.AsEnumerable().

    Where(row =>row.Field<int>("id") == valueId).

Select(row =>row.Field<string>("address")).Single();

 

Как можно увидеть, способы реализации одного и того же запроса не сильно отличаются друг от друга.

 

Пример 2. Имеется некая таблица «TrainingPrograms», которая содержит сведения о предоставляемых ВУЗом направлениях подготовки будущих специалистов. Требуется найти и вывести все направления, включающие в себя профессию «сварщик». Наименование профессии может быть написано как с заглавной буквы, так и со строчной.

Способ решения.

string text=profession.Text().ToLower();

var table = TrainingPrograms.AsEnumerable().

    Where(x =>x.Field<string>(nameColumn).

             ToLower().Contains(text)).CopyToDataTable();

dataGridView1.DataSource = table;

 

Поисковая и результирующая строки приводятся к единому регистру для нахождения всех возможных включений в запросе.

 

Пример 3. Имеется некая таблица под именем «Universities». Требуется найти конкретную запись и выписать её значения в отдельные текстовые поля.

Способ решения.

Tables.ActiveTable.Select(string.Format("[name]='{0}'",

Data.DataGridCell.ToString())).ToList().ForEach(x =>{

txtName.Text = x["name"].ToString();

txtPhone.Text = x["phone"].ToString();

txtAddress.Text = x["address"].ToString();

txtMail.Text = x["mail"].ToString();

txtWebsite.Text = x["website"].ToString();});

 

Надеюсь, что материал данной статьи будет полезен тем, кто хотел ознакомиться с запросами к DataTable при помощи технологии LINQ.

 

Литература


1)     LINQ. Язык интегрированных запросов в C# 2008 для профессионалов / Джозеф Раттц-мл.; [пер. с англ. Н. А. Мухина]. - Москва [и др.]: Вильямс, 2008. - 549 с.

2)     Синтаксис LINQ [Электронный ресурс]. – Режим доступа: https://docs.microsoft.com/ru-ru/dotnet/framework/data/adonet/queries-in-linq-to-dataset

3)     Синтаксис LINQ [Электронный ресурс]. – Режим доступа: https://docs.microsoft.com/ru-ru/dotnet/csharp/linq/



Обновлено 20.05.2020 11:16