- Запрос одной таблицы в 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
Метод Field
Public static T Filed<T>(this DataRow row,string columnName)
Описание параметра:
- row: указывает имя текущего доступного столбца.
- columnName:: указывает имя столбца, к которому необходимо получить доступ.
- Возвращаемое значение: значение 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
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
}