Linq To DataSetСводка

искусственный интеллект
  • Запрос одной таблицы в DATASET с использованием технологии LINQ

    private void Form1_Load(object sender, EventArgs e)

        {

String ConnectionString = "Источник данных=DESKTOP-M4PUOAS\\SQLEXPRESS;Исходный каталог=db_TomeTwo;Идентификатор пользователя=sa;Пароль=wh1090220084";//Объявить строку подключения

Использование (SqlConnection conn = new SqlConnection(ConnectionString))//Создание объекта подключения к базе данных

            {

String sqlstr = "select * from tb_Bookinfo";//Определить оператор запроса

SqlDataAdapter da = new SqlDataAdapter(sqlstr, conn);//Создаем объект моста данных

DataSet ds = new DataSet();//Создать объект данных

da.Fill(ds, "tb_Bookinfo");//Заполняем набор данных

//Найти книги, изданные в марте

                var result = from b in ds.Tables["tb_Bookinfo"].AsEnumerable()

                             where b.Field<DateTime>("b_pub_date").Month == 3

                             select new

                             {

                                 bookname = b["b_name"].ToString(),

                                 author = b["b_pub_date"].ToString()

                             };

Foreach (var item in result)//Перебор названия и даты публикации книги

                {

richTextBox1.Text +="Название книги:" + item.bookname + ";Дата публикации:" + item.author+"\n";

                }

            }

        }

Во-вторых, используйте технологию LINQ для выполнения операции проецирования на DataSet.

В этом примере используется только универсальный метод Field класса DataRowExtensions.

Метод Field используется для предоставления строго типизированного доступа к каждому значению столбца в указанной строке.Его синтаксис следующий:

 Public static T Filed<T>(this DataRow row,string columnName)

Описание параметра:

  1. row: указывает имя текущего доступного столбца.
  2. columnName:: указывает имя столбца, к которому необходимо получить доступ.
  3. Возвращаемое значение: значение DataColumn, указанное в столбце columnName, тип — T.

       private void Frm_Main_Load(object sender, EventArgs e)

        {

String ConnectionString = "Источник данных=DESKTOP-M4PUOAS\\SQLEXPRESS;Исходный каталог=db_TomeTwo;Идентификатор пользователя=sa;Пароль=wh1090220084";//Объявить строку подключения

Использование (SqlConnection Conn = new SqlConnection(ConnectionString))//Создание объекта подключения к базе данных

            {

String sqlstr = "выбрать 5 лучших* из tb_Bookinfo";//Определить оператор запроса

SqlDataAdapter da = new SqlDataAdapter(sqlstr, Conn);//Создаем объект моста данных

DataSet ds = new DataSet();//Создать объект данных

da.Fill(ds, "tb_Bookinfo");//Заполняем набор данных

//Запрос названия книги и автора первых 3 строк данных в таблице информации о книге

                var result = from b in ds.Tables["tb_Bookinfo"].AsEnumerable()

                             select new

                             {

                                 b_name = b.Field<string>("b_name"),

                                 b_author = b.Field<string>("b_author")

                             };

Foreach (элемент var в результате)//обходим результаты выходного запроса

                {

RichTextBox1.Text +="Название книги:" + item.b_name + " ****** Автор:" + item.b_author+"\n";

                }

            }

        }

3. Используйте технологию LINQ для запроса нескольких таблиц в наборе данных.

     private void Frm_Main_Load(object sender, EventArgs e)

        {

String ConnectionString = "Источник данных=DESKTOP-M4PUOAS\\SQLEXPRESS;Исходный каталог=db_TomeTwo;Идентификатор пользователя=sa;Пароль=wh1090220084";//Объявить строку подключения

Использование (SqlConnection Conn = new SqlConnection(ConnectionString))//Создание объекта подключения к базе данных

            {

String sqlstr = "select * from tb_Register";//Определить оператор запроса

SqlDataAdapter da = new SqlDataAdapter(sqlstr, Conn);//Создаем объект моста данных

DataSet ds = new DataSet();//Создать объект данных

da.Fill(ds, "register");//Заполняем данные первой таблицы данных в DataSet

sqlstr = "выбрать * из tb_Sale";//Определить оператор запроса

da.SelectCommand.CommandText = sqlstr;//Указываем второй оператор запроса

da.Fill(ds, "sale");//Заполняем данные второй таблицы данных в DataSet

//Запрос информации о наркотиках с записями о продажах

                var result = from r in ds.Tables["register"].AsEnumerable()

                             join s in ds.Tables["sale"].AsEnumerable()

on r.Field("номер препарата") равно s.Field("номер препарата")

                             select new

                             {

Drug_name = r["название лекарства"].ToString(),

Drug_factory = r["производитель"].ToString(),

Drug_sale = s["продажи"].ToString()

                             };

foreach (элемент var в результате) //обходим результаты выходного запроса

                {

richTextBox1.Text += "Название лекарства:" + item.drug_name + "*****Производитель:" + item.drug_factory + "******Продажи:" + item.drug_sale + "\n";

                }

            }

        }

В-четвертых, используйте технологию LINQ для сортировки набора данных.

private void Frm_Main_Load(object sender, EventArgs e)

        {

String ConnectionString = "server=WIN-GI7E47AND9R\\LS; database=db_TomeTwo; uid=sa; pwd=";//Строка подключения

Использование (SqlConnection Conn = new SqlConnection(ConnectionString))//Создание объекта подключения к базе данных

            {

String sqlstr = "select * from tb_Bookinfo";//Определить оператор запроса

SqlDataAdapter da = new SqlDataAdapter(sqlstr, Conn);//Создаем объект моста данных

DataSet ds = new DataSet();//Создать объект данных

da.Fill(ds, "tb_Bookinfo");//Заполняем набор данных

//сортируем по цене за единицу в порядке убывания

                var result = from b in ds.Tables["tb_Bookinfo"].AsEnumerable()

                             orderby b.Field<decimal>("b_price") descending

                             select new

                             {

                                 b_name = b["b_name"].ToString(),

                                 b_price = b["b_price"].ToString()

                             };

Foreach (элемент var в результате)//обходим результаты выходного запроса

                {

RichTextBox1.Text+="Название книги: " + item.b_name + " ****** Цена за единицу: " + item.b_price+"\n";

                }

            }

        }

5. Используйте TakeWhile для извлечения записей, соответствующих условиям

     private void Frm_Main_Load(object sender, EventArgs e)

        {

String conStr = "Data Source=WIN-GI7E47AND9R\\LS;Database=db_TomeTwo;UID=sa;Pwd=;";//Получить строку подключения

String sql = "select * from EmployeeInfo";//Построение оператора sql

DataSet ds = new DataSet();//Создать набор данных

Использование (SqlConnection con = new SqlConnection(conStr))//Создание подключения к данным

            {

SqlCommand cmd = new SqlCommand(sql, con);//Создать объект Command

SqlDataAdapter sda = new SqlDataAdapter(cmd);//Создать объект DataAdapter

sda.Fill(ds, "EmployeeInfo");//Заполнить набор данных

            }

//Получить информацию о сотрудниках, чей день рождения меньше, чем 2009-7-1 с самого начала

            IEnumerable<DataRow> query = ds.Tables["EmployeeInfo"].AsEnumerable().TakeWhile(itm => itm.Field<DateTime>("Birthday") < Convert.ToDateTime("2009-7-1"));

dataGridView1.DataSource = query.CopyToDataTable();//Устанавливаем источник данных dataGridView1

        }

6. Используйте SkipWhile для пропуска записей с указанными условиями.

   private void Frm_Main_Load(object sender, EventArgs e)

        {

String conStr = "Data Source=WIN-GI7E47AND9R\\LS;Database=db_TomeTwo;UID=sa;Pwd=;";//Получить строку подключения

String sql = "select * from EmployeeInfo";//Построение оператора sql

DataSet ds = new DataSet();//Создать набор данных

Использование (SqlConnection con = new SqlConnection(conStr))//Создание подключения к данным

            {

SqlCommand cmd = new SqlCommand(sql, con);//Создать объект Command

SqlDataAdapter sda = new SqlDataAdapter(cmd);//Создать объект DataAdapter

sda.Fill(ds, "EmployeeInfo");//Заполнить набор данных

            }

//Пропустить информацию о сотрудниках, чей день рождения меньше, чем 2009-7-1

            IEnumerable<DataRow> query = ds.Tables["EmployeeInfo"].AsEnumerable().SkipWhile(itm => itm.Field<DateTime>("Birthday") < Convert.ToDateTime("2009-7-1"));

dataGridView1.DataSource = query.CopyToDataTable();//Устанавливаем источник данных dataGridView1

        }