天天看點

Linq To SQl總結

一、如何建立LINQ to SQL項目。

    1. 建立項目後,選擇建立項,找LINQ toSQL類,然後命名,添加。
Linq To SQl總結

找到相應的資料庫,選擇對應的表,将其托到空白處。

Linq To SQl總結
Linq To SQl總結

例如:查詢WarehouseInfo表的資料。

Linq To SQl總結

代碼如下:

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中的方法

Linq To 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

十八、根據外鍵擷取主鍵資訊

Linq To SQl總結
Linq To SQl總結

 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