Linq To SQl总结

一、如何新建LINQ to SQL项目。


    1. 新建项目后,选择新建项,找LINQ toSQL类,然后命名,添加。
    2. 找到相应的数据库,选择对应的表,将其托到空白处。

 

例如:查询WarehouseInfo表的数据。

 

代码如下: 

private void Frm_Main_Load(object sender, EventArgs e)

        {

      DataClassesDataContext DC = new DataClassesDataContext();//创建数据上下文类的实例

            var query = from item in DC.WarehouseInfo

扫描二维码关注公众号,回复: 10908193 查看本文章

                        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

                        select item;

            dataGridView1.DataSource = query;//将查询结果集绑定到dataGridView1

        }

四、关联查询多张表

   private void Frm_Main_Load(object sender, EventArgs e)

        {

            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//按客户代码关联客户信息表

                        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,//商品名称

                            Quantity = sd.Quantity,//数量

                            Price = sd.Price,//单价

                            Amount = sd.Quantity * sd.Price,//金额

                            GrossProfit = sd.Quantity * (sd.Price - sd.Cost)//毛利=销售金额-商品成本

                        };

            dataGridView1.DataSource = query;//将查询的结果集绑定到dataGridView1

        }

五、按照多个条件分组

private void Frm_Main_Load(object sender, EventArgs e)

        {

            DataClassesDataContext dc = new DataClassesDataContext();//创建数据上下文类的实例

            var query = from sto in dc.V_StoreInfo//查询库存表

                        group sto by new { sto.WarehouseCode, sto.ProductCode } into g//按仓库代码、商品代码分组

                        select new

                        {

                            仓库代码 = 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)

        {

            DataClassesDataContext dc = new DataClassesDataContext();//创建数据上下文类的实例

            //统计每种商品的销售次数

            var query = from det in dc.V_SaleDetail

                        group det by det.ProductCode into g//按商品代码分组

                        select new

                        {

                            商品代码 = g.Key,

                            商品名称 = g.Max(itm => itm.ProductName),

                            销售次数 = g.Count()//使用Count方法统计销售次数

                        };

            dataGridView1.DataSource = query;//将查询结果集绑定到dataGridView1

        }

七、SUM操作-统计每种商品的销售总额

private void Frm_Main_Load(object sender, EventArgs e)

        {

   DataClassesDataContext dc = new DataClassesDataContext();//创建数据上下文类的实例

            //统计每种商品的销售总额

            var query = from det in dc.V_SaleDetail

                        group det by det.ProductCode into 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

                        group det by det.ProductCode into g//按商品代码分组

                        select new

                        {

                            商品代码 = g.Key,

                            商品名称 = g.Max(itm => itm.ProductName),

                            最高销售价 = g.Max(itm => itm.Price)//统计每种商品的最高销售价

                        };

            dataGridView1.DataSource = query;//对dataGridView1进行数据绑定

        }

九、Min操作-统计每种商品的最低售价

private void Frm_Main_Load(object sender, EventArgs e)

        {

            DataClassesDataContext dc = new DataClassesDataContext();//创建数据上下文类的实例

            //统计每种商品的最低销售单价

            var query = from det in dc.V_SaleDetail

                        group det by det.ProductCode into g//按商品代码分组

                        select new

                        {

                            商品代码 = g.Key,

                            商品名称 = g.Max(itm => itm.ProductName),

                            销售最低价 = g.Min(itm => itm.Price)//统计每种商品的最低销售单价

                        };

            dataGridView1.DataSource = query;//对dataGridView1进行数据绑定

        }

十、Average操作-统计每种商品的销售均价

private void Frm_Main_Load(object sender, EventArgs e)

        {

      DataClassesDataContext dc = new DataClassesDataContext();//创建数据上下文类的实例

            //统计每种商品的销售平均价

            var query = from det in dc.V_SaleDetail

                        group det by det.ProductCode into g//按商品代码分组

                        select new

                        {

                            商品代码 = g.Key,

                            商品名称 = g.Max(itm => itm.ProductName),

                            销售平均价 = g.Average(itm => itm.Price)//使用Average统计每种商品的销售平均价

                        };

            dataGridView1.DataSource = query;//将查询的结果集绑定到dataGridView1

        }

十一、差集操作-获取从未返过货的商品列表

   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

        }

十二、直接执行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 (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

                                       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("修改成功");//弹出成功的提示

                    binginfo();//重新绑定数据

                }

            }

        }

十五、使用LINQ技术在SQL数据库中删除数据

    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

                             select info;//创建linq,并设置删除的条件

                linq.tb_User.DeleteAllOnSubmit(result);//通过DeleteAllOnSubmit方法删除指定的数据

                linq.SubmitChanges();//提交对数据表的修改

                MessageBox.Show("删除成功");//弹出提示

                bindinfo();//重新绑定数据

            }

            else//如果没有选择项

            {

                MessageBox.Show("请选择删除项");//显示提示信息

            }

        }

十六、使用存储过程查询表单数据

将存储过程拖进 .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)

                   set @sex = '女'

         ELSE

                   set @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

        }

十八、根据外键获取主键信息

 

    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<T>类型获取主表信息

                            it.DictionaryType.DictTypeName,

                            it.DictItemCode,

                            it.DictItemName

                        };

            dataGridView1.DataSource = query;//将查询的结果集绑定到dataGridView1

        }

发布了60 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/105542028