一、如何建立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
where item.Area >= 100//使用LINQ查詢面積大于100平的倉庫
orderby item.ShortName//按倉庫名稱排序
select item;
dataGridView1.DataSource = query.ToList();//将查詢結果集綁定到dataGridView1
}
二、使用Contains擷取與Not Exist(NOT IN)等價的語句
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,
商品名稱 = sto.ProductName,
數量 = sto.Quantity,
單價 = sto.Price,
金額 = sto.Amount
};
dataGridView1.DataSource = query;//将查詢結果綁定到dataGridView1
三、按多個字段降序排序
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
dataGridView1.DataSource = query;//将查詢結果集綁定到dataGridView1
四、關聯查詢多張表
DataClassesDataContext dc = new DataClassesDataContext();//建立LINQ對象
var query = from sc in dc.SaleContent//銷售主表
join sd in dc.SaleDetail on sc.SaleBillCode equals sd.SaleBillCode//按銷售單據号關聯銷售主從表
join pi in dc.ProductInfo on sd.ProductCode equals pi.ProductCode//按商品代碼關聯商品資訊表
join ei in dc.EmployeeInfo on sc.SaleMan equals ei.EmployeeCode//按人員代碼關聯員工表
join wi in dc.WarehouseInfo on sc.WareHouse equals wi.WareHouseCode//按倉庫代碼關聯倉庫資訊表
join ci in dc.ClientInfo on sc.ClientCode equals ci.ClientCode//按客戶代碼關聯客戶資訊表
ID = sc.ID,
SaleBillCode = sc.SaleBillCode,//銷售單據号
SaleMan = ei.Name,//從員工表取銷售員名稱
SaleDate = sc.SaleDate,//銷售日期
Provider = ci.ShortName,//從客戶表取購買機關名稱
WareHouse = wi.ShortName,//從倉庫表取倉庫名稱
ProductCode = pi.ProductCode,//從商品資訊表取商品代碼
ProductName = pi.ShortName,//商品名稱
Quantity = sd.Quantity,//數量
Price = sd.Price,//單價
Amount = sd.Quantity * sd.Price,//金額
GrossProfit = sd.Quantity * (sd.Price - sd.Cost)//毛利=銷售金額-商品成本
dataGridView1.DataSource = query;//将查詢的結果集綁定到dataGridView1
五、按照多個條件分組
DataClassesDataContext dc = new DataClassesDataContext();//建立資料上下文類的執行個體
var query = from sto in dc.V_StoreInfo//查詢庫存表
group sto by new { sto.WarehouseCode, sto.ProductCode } into g//按倉庫代碼、商品代碼分組
倉庫代碼 = g.Key.WarehouseCode,
倉庫名稱 = g.Max(itm => itm.WareHouseName),
商品代碼 = g.Key.ProductCode,
商品名稱 = g.Max(itm => itm.ProductName),
庫存數量 = g.Sum(itm => itm.Quantity)
dataGridView1.DataSource = query;//将分組的結果集綁定到dataGridView1
六、Count操作-統計每種商品的銷售次數
private void Frm_Main_Load(object sender, EventArgs e)
//統計每種商品的銷售次數
var query = from det in dc.V_SaleDetail
group det by det.ProductCode into g//按商品代碼分組
商品代碼 = g.Key,
銷售次數 = g.Count()//使用Count方法統計銷售次數
七、SUM操作-統計每種商品的銷售總額
DataClassesDataContext dc = new DataClassesDataContext();//建立資料上下文類的執行個體
//統計每種商品的銷售總額
銷售總額 = g.Sum(itm => itm.amount)//合計每種商品的銷售總額
八、MAX操作-統計每種商品的最高銷售價
DataClassesDataContext dc = new DataClassesDataContext();//建立資料上下文類的執行個體
//統計每種商品的最高銷售價
最高銷售價 = g.Max(itm => itm.Price)//統計每種商品的最高銷售價
dataGridView1.DataSource = query;//對dataGridView1進行資料綁定
九、Min操作-統計每種商品的最低售價
//統計每種商品的最低銷售單價
銷售最低價 = g.Min(itm => itm.Price)//統計每種商品的最低銷售單價
十、Average操作-統計每種商品的銷售均價
//統計每種商品的銷售平均價
銷售平均價 = g.Average(itm => itm.Price)//使用Average統計每種商品的銷售平均價
十一、差集操作-擷取從未返過貨的商品清單
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);//取差集
十二、直接執行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<V_StoreInfo>(sql);//執行SQL查詢
dataGridView1.DataSource = query.ToList();//對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
{
Name = info.User_Name,//擷取姓名
Sex = info.User_Sex,//擷取性别
Age = 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 (txtphone.Text.Length != 11)//如果電話号碼錯誤
MessageBox.Show("電話号碼位數不正确");//彈出提示
else
linq = new linqtosqlDataContext(strCon);
var resultChange = from info in linq.tb_User
where 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("修改成功");//彈出成功的提示
十五、使用LINQ技術在SQL資料庫中删除資料
int id;//定義一個變量,用來記錄選中的編号
id =Convert.ToInt32( dataGridView1.SelectedRows[0].Cells[0].Value);//記錄使用者選擇的編号
private void button2_Click(object sender, EventArgs e)
Application.Exit();
if (dataGridView1.SelectedRows.Count != 0)//判斷是否選擇了項目
linq = new linqtosqlDataContext(strCon);
where info.ID == id
select info;//建立linq,并設定删除的條件
linq.tb_User.DeleteAllOnSubmit(result);//通過DeleteAllOnSubmit方法删除指定的資料
linq.SubmitChanges();//送出對資料表的修改
MessageBox.Show("删除成功");//彈出提示
bindinfo();//重新綁定資料
else//如果沒有選擇項
MessageBox.Show("請選擇删除項");//顯示提示資訊
十六、使用存儲過程查詢表單資料
将存儲過程拖進 .dbml檔案中,然後調用如下代碼:
var query = dc.P_queryWarehouseInfo(textBox1.Text);//調用存儲過程傳回倉庫資訊
十七、使用LINQ技術調用SQL中的方法
ALTER FUNCTION [dbo].[F_GetSex]
(
@SexFlag Varchar(10)
)
RETURNS Varchar(2)
AS
begin
declare @sex varchar(2)
IF (@SexFlag = 1)
set @sex = '女'
ELSE
set @sex = '男'
RETURN @sex
end
var query = from emp in dc.EmployeeInfo
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
十八、根據外鍵擷取主鍵資訊
private void Frm_Main_Load(object sender, EventArgs e)
var query = from it in dc.DictionaryItem
it.DictItemID,
it.DictionaryType.DictTypeCode,//通過EntityRef<T>類型擷取主表資訊
it.DictionaryType.DictTypeName,
it.DictItemCode,
it.DictItemName