1. Как создать новый проект LINQ to SQL.
-
-
После создания нового проекта выберите «Новый элемент», найдите класс LINQ toSQL, назовите его и добавьте. - Найдите соответствующую базу данных, выберите соответствующую таблицу и поместите ее в пустое место.
-
Например: запросите данные таблицы WarehouseInfo.
код показывает, как показано ниже:
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext DC = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
var query = from item in DC.WarehouseInfo
Где item.Area >= 100//Используйте LINQ для запроса складов площадью более 100 квадратных метров.
orderby item.ShortName//сортировать по названию склада
select item;
DataGridView1.DataSource = query.ToList();//Привязываем набор результатов запроса к dataGridView1
}
2. Используйте «Содержит», чтобы получить оператор, эквивалентный «Не существует» (НЕ ВНУТРИ).
**** private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
// Список предметов в инвентаре, которые никогда не продавались
var query = from sto in dc.V_StoreInfo
//Подзапрос применяется в предложении where
where !(from sal in dc.V_SaleInfo
select sal.ProductCode).Contains(sto.ProductCode)
select new
{
Склад = sto.WareHouseName,
ProductName = sto.ProductName,
Количество = сто.Количество,
Цена за единицу = сто.Цена,
Сумма = Сто.Сумма
};
dataGridView1.DataSource = query;//Привязываем результат запроса к dataGridView1
}
3. Сортировать по нескольким полям в порядке убывания
**** private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc =new DataClassesDataContext();//Создаем экземпляр класса контекста данных
//сортируем по убыванию по товарной номенклатуре и единице измерения
var query = from item in dc.ProductInfo
orderby item.ProductType descending, item.Unit descending
select item;
DataGridView1.DataSource = query;//Привязываем набор результатов запроса к dataGridView1
}
Четыре связанных запроса к нескольким таблицам
private void Frm_Main_Load(object sender, EventArgs e)
{
****DataClassesDataContext dc = new DataClassesDataContext();//Создать объект LINQ
var query = from sc в dc.SaleContent//Основная таблица Sales
Присоединить pi в dc.ProductInfo к sd.ProductCode равно pi.ProductCode//Связать таблицу информации о продукте по коду продукта
Присоединиться к ei в dc.EmployeeInfo на sc.SaleMan равно ei.EmployeeCode//Связать таблицу сотрудников по коду сотрудника
Присоединиться к wi в dc.WarehouseInfo на sc.WareHouse равно wi.WareHouseCode//Связать таблицу информации о складе по коду склада
присоединиться к ci в dc.ClientInfo на sc.ClientCode равно ci.ClientCode // Ассоциировать таблицу информации о клиенте по коду клиента
select new
{
ID = sc.ID,
SaleBillCode = sc.SaleBillCode,//Номер торгового документа
SaleMan = ei.Name,//Получить имя продавца из таблицы сотрудников
SaleDate = sc.SaleDate, // Дата продажи
Provider = ci.ShortName,//Получить название закупочной единицы из таблицы клиентов
WareHouse = wi.ShortName,//Получить имя склада из таблицы склада
ProductCode = pi.ProductCode,//Получить код продукта из таблицы информации о продукте
ProductName = pi.ShortName, // название продукта
Количество = sd.Количество,//Количество
Цена = sd.Price,//цена за единицу
Сумма = sd.Quantity * sd.Price,//сумма
Валовая прибыль = sd.Quantity * (sd.Price - sd.Cost)//валовая прибыль = объем продаж - себестоимость товара
};
dataGridView1.DataSource = query;//Привязываем результирующий набор запроса к dataGridView1
}
5. Группировка по нескольким условиям
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
var query = from sto in dc.V_StoreInfo//Таблица инвентаризации запроса
сгруппировать sto по new { sto.WarehouseCode, sto.ProductCode } в g//Группировать по коду склада и коду товара
select new
{
Код склада = g.Key.WarehouseCode,
ИмяСклада = g.Max(itm => itm.ИмяСклада),
Код товара = g.Key.ProductCode,
Название продукта = g.Max(itm => itm.ProductName),
Количество на складе = g.Sum(itm => itm.Quantity)
};
dataGridView1.DataSource = query;//Привязать сгруппированный набор результатов к dataGridView1
}
6. Операция подсчета - подсчет количества продаж каждого товара
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
//Подсчитываем количество продаж каждого товара
var query = from det in dc.V_SaleDetail
сгруппировать det по det.ProductCode в g//сгруппировать по коду продукта
select new
{
Код товара = g.Key,
Название продукта = g.Max(itm => itm.ProductName),
Количество продаж = g.Count()//Используем метод Count для подсчета количества продаж
};
DataGridView1.DataSource = query;//Привязываем набор результатов запроса к dataGridView1
}
Семь, операция СУММ - статистика общих продаж каждого товара
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
//Статистика общих продаж каждого товара
var query = from det in dc.V_SaleDetail
сгруппировать det по det.ProductCode в g//сгруппировать по коду продукта
select new
{
Код товара = g.Key,
Название продукта = g.Max(itm => itm.ProductName),
Общий объем продаж = g.Sum(itm => itm.amount)//Общий объем продаж каждого товара
};
dataGridView1.DataSource = query;//Привязываем результат запроса к dataGridView1
}
Восемь, операция MAX - статистика максимальной цены продажи каждого товара.
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
//Статистика самой высокой цены продажи каждого продукта
var query = from det in dc.V_SaleDetail
сгруппировать det по det.ProductCode в g//сгруппировать по коду продукта
select new
{
Код товара = g.Key,
Название продукта = g.Max(itm => itm.ProductName),
Самая высокая цена продажи = g.Max(itm => itm.Price)//Самая высокая цена продажи каждого товара
};
dataGridView1.DataSource = запрос;//DataBind dataGridView1
}
9. Мин. операция - статистика минимальной цены каждого товара
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
//Статистика минимальной продажной цены за единицу каждого товара
var query = from det in dc.V_SaleDetail
сгруппировать det по det.ProductCode в g//сгруппировать по коду продукта
select new
{
Код товара = g.Key,
Название продукта = g.Max(itm => itm.ProductName),
Самая низкая цена продажи = g.Min(itm => itm.Price)//Статистика самой низкой цены продажи каждого продукта
};
dataGridView1.DataSource = запрос;//DataBind dataGridView1
}
10. Средняя операция — среднестатистическая цена продажи каждого продукта.
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
//Статистика средней цены продажи каждого товара
var query = from det in dc.V_SaleDetail
сгруппировать det по det.ProductCode в g//сгруппировать по коду продукта
select new
{
Код товара = g.Key,
Название продукта = g.Max(itm => itm.ProductName),
Средняя цена продажи = g.Average(itm => itm.Price)//Используйте Average для подсчета средней цены продажи каждого продукта
};
dataGridView1.DataSource = query;//Привязываем результирующий набор запроса к dataGridView1
}
11. Разностная операция - получить список товаров, которые никогда не возвращались
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
var saleInfo = dc.V_SaleInfo.Select(itm => new { itm.ProductCode, itm.ProductName });//Информация о продажах
var saleRetu = dc.V_SaleReturnInfo.Select(itm => new { itm.ProductCode, itm.ProductName });//Возврат продажи
var query = saleInfo.Except(saleRetu);//Возьмем набор разностей
dataGridView1.DataSource = query;//Привязываем результирующий набор запроса к dataGridView1
}
12. Непосредственно выполнять операторы SQL
private void button1_Click(object sender, EventArgs e)
{
string sql = "select * from V_StoreInfo where 1=1";
If (comboBox1.SelectedIndex > -1)//Выпадающий список склада не пуст
{
sql += " and WareHouseName = '" + comboBox1.Text + "'";
}
If (textBox1.Text.Trim()!= "")//Текстовое поле мнемонического кода продукта не пусто
{
sql += " and HelpCode like '" + textBox1.Text + "%'";
}
var query = dc.ExecuteQuery
DataGridView1.DataSource = query.ToList();//DataBind dataGridView1
}
Тринадцать, используйте технологию LINQ для добавления данных в базу данных SQL.
private void button1_Click(object sender, EventArgs e)
{
//Определяем, нужно ли вводить имя, возраст, номер телефона и домашний адрес
if (txtaddress.Text != "" && txtage.Text != "" && txtName.Text != "" && txtphone.Text != "")
{
If (txtphone.Text.Length != 11)//Определяем, является ли введенный номер телефона законным
{
MessageBox.Show("Количество цифр в телефонном номере неверное");//Если это неправильно, появится подсказка
}
Else//Если введенный номер телефона действителен
{
linq = new linqtosqlDataContext();//Создаем объект подключения linq
tb_User users = new tb_User();//Создать объект tb_User
Users.User_Name = txtName.Text.Trim();//Задаем имя
users.User_Sex = cbbSex.Text;//Пол
Users.User_Age = txtage.Text;//Возраст
users.User_Marriage = cbbmary.Text;//семейное положение
Users.User_Duty = cbbduty.Text;//Позиция
Users.User_Phone = txtphone.Text;//Телефон
Users.User_Address = txtaddress.Text;//Домашний адрес
linq.tb_User.InsertOnSubmit(users);//Отправить данные
linq.SubmitChanges();//Выполнить изменения в базе данных
binginfo();//Перепривязываем данные
MessageBox.Show("Добавлено успешно");//Всплывающее окно
}
}
}
Четырнадцать, используйте технологию LINQ для изменения данных в базе данных SQL.
int Pid;//Определяем переменную для записи выбранного числа
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
If (dataGridView1.SelectedRows.Count != 0)//Определяем, выбрана ли строка
{
linq = new linqtosqlDataContext(strCon);//Инициализировать объект подключения LINQ
Pid = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);//Запишите выбранное число
//Запросить информацию, соответствующую заданным условиям
var result = from info in linq.tb_User
where info.ID == Pid
select new
{
Имя = info.User_Name,//Получить имя
Пол = info.User_Sex,//Получить пол
Возраст = info.User_Age,//Получить возраст
Mary = info.User_Marriage,//Получить семейное положение
Duty = info.User_Duty,//Получить позицию
Phone = info.User_Phone,//Получить номер телефона
Address = info.User_Address//Получить контактный адрес
};
foreach (var item in result)
{
txtName.Text = item.Name.Trim();//Отображаемое имя
cbbSex.Text = item.Sex.Trim();//Показать пол
txtage.Text = item.Age.Trim();//Показать возраст
cbbmary.Text = item.Mary.Trim();//Показать семейное положение
cbbduty.Text = item.Duty.Trim();//Показать позицию
txtphone.Text = item.Phone.Trim();//Показать номер контакта
txtaddress.Text = item.Address.Trim();//Показать контактный адрес
}
}
}
private void button1_Click(object sender, EventArgs e)
{
//Определяем, нужно ли вводить имя, возраст, номер телефона и домашний адрес
if (txtaddress.Text != "" && txtage.Text != "" && txtName.Text != "" && txtphone.Text != "")
{
If (txtphone.Text.Length != 11)//Если номер телефона неверный
{
MessageBox.Show("Неверное количество цифр в номере телефона");//Всплывает подсказка
}
else
{
linq = new linqtosqlDataContext(strCon);
var resultChange = from info in linq.tb_User
Где info.ID == Pid//Создать linq и настроить его на изменение в соответствии со значением ID
select info;
foreach (tb_User users in resultChange)
{
Users.User_Name = txtName.Text;//Имя
Users.User_Sex = cbbSex.Text;//Пол
Users.User_Age = txtage.Text;//Возраст
Users.User_Marriage = cbbmary.Text;//Семейное положение
Users.User_Duty = cbbduty.Text;//Позиция
Users.User_Phone = txtphone.Text;//Телефон
Users.User_Address = txtaddress.Text;//Домашний адрес
linq.SubmitChanges();//Метод SubmitChanges отправляет изменения
}
MessageBox.Show("Изменено успешно");//Всплывает сообщение об успешном завершении
binginfo();//Перепривязываем данные
}
}
}
15. Удалить данные в базе данных SQL с помощью технологии LINQ
int id;//Определяем переменную для записи выбранного числа
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
If (dataGridView1.SelectedRows.Count != 0)//Определяем, выбрана ли строка
{
id =Convert.ToInt32( dataGridView1.SelectedRows[0].Cells[0].Value);//Записываем число, выбранное пользователем
}
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void button1_Click(object sender, EventArgs e)
{
If (dataGridView1.SelectedRows.Count != 0)//Определяем, выбран ли элемент
{
linq = new linqtosqlDataContext(strCon);
var result = from info in linq.tb_User
where info.ID == id
Выбрать информацию;//Создать linq и задать условия для удаления
linq.tb_User.DeleteAllOnSubmit(result);//Удаляем указанные данные через метод DeleteAllOnSubmit
linq.SubmitChanges();//Отправляем изменения в таблицу данных
MessageBox.Show("Успешное удаление");//Всплывающее сообщение
bindinfo();//Перепривязываем данные
}
else//если нет вариантов
{
MessageBox.Show("Пожалуйста, выберите элемент для удаления");//Отображение подсказки
}
}
16. Запрос данных формы с помощью хранимых процедур
Перетащите хранимую процедуру в файл .dbml и вызовите следующий код:
private void button1_Click(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
var query = dc.P_queryWarehouseInfo(textBox1.Text);//Вызов хранимой процедуры для возврата информации о складе
dataGridView1.DataSource = query;//Привязываем результат запроса к dataGridView1
}
Семнадцать, используйте технологию LINQ для вызова методов в SQL.
ALTER FUNCTION [dbo].[F_GetSex]
(
@SexFlag Varchar(10)
)
RETURNS Varchar(2)
AS
begin
declare @sex varchar(2)
IF (@SexFlag = 1)
установить @sex = 'женский'
ELSE
установить @sex = 'мужской'
RETURN @sex
end
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
var query = from emp in dc.EmployeeInfo
select new
{
emp.Addr,
emp.Birthday,
emp.EMail,
emp.EmployeeCode,
emp.Handset,
emp.HelpCode,
emp.ID,
emp.IDCard,
emp.Name,
emp.OperateDate,
emp.Operator,
emp.Tel,
Sex = dc.F_GetSex(emp.Sex)//Вызов функции в SQL Server для отображения информации о поле китайского языка
};
DataGridView1.DataSource = query.Take(5);//Привязываем набор результатов запроса к dataGridView1
}
18. Получить информацию о первичном ключе на основе внешних ключей
private void Frm_Main_Load(object sender, EventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();//Создаем экземпляр класса контекста данных
var query = from it in dc.DictionaryItem
select new
{
it.DictItemID,
It.DictionaryType.DictTypeCode,//Получить информацию об основной таблице через тип EntityRef
it.DictionaryType.DictTypeName,
it.DictItemCode,
it.DictItemName
};
dataGridView1.DataSource = query;//Привязываем результирующий набор запроса к dataGridView1
}