ТЕХНОЛОГИЯ 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 |