天天看点

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