Linq To DataSet总结

使用LINQ技术查询DATASET中的单个表

   private void Form1_Load(object sender, EventArgs e)


       {undefined


           string ConnectionString = "Data Source=DESKTOP-M4PUOAS\\SQLEXPRESS;Initial Catalog=db_TomeTwo;User ID=sa;Password=wh1090220084";//声明连接字符串


           using (SqlConnection conn = new SqlConnection(ConnectionString))//创建数据库连接对象


           {undefined


               string sqlstr = "select * from tb_Bookinfo";//定义查询语句


               SqlDataAdapter da = new SqlDataAdapter(sqlstr, conn);//创建数据桥接器对象


               DataSet ds = new DataSet();//创建数据对象


               da.Fill(ds, "tb_Bookinfo");//填充数据集


               //查找3月份出版的图书


               var result = from b in ds.Tables["tb_Bookinfo"].AsEnumerable()


                            where b.Field<DateTime>("b_pub_date").Month == 3


                            select new


                            {undefined


                                bookname = b["b_name"].ToString(),


                                author = b["b_pub_date"].ToString()


                            };


               foreach (var item in result)//遍历图书的书名和出版日期


               {undefined


                  richTextBox1.Text +="书名:" + item.bookname + ";出版日期:" + item.author+"\n";


               }


           }


       }


二、使用LINQ技术对DataSet进行投影操作


本例只要用到了DataRowExtensions类的Field<T>泛型方法


Field<T>方法用来提供对指定行中的每个列值的强类型访问,其语法格式如下:


Public static T Filed<T>(this DataRow row,string columnName)


  参数说明:


row:表示当前访问的列名称。

columnName::表示访问的列名称。

返回值:由columnName指定的DataColumn的值,类型为T

      private void Frm_Main_Load(object sender, EventArgs e)


       {undefined


           string ConnectionString = "Data Source=DESKTOP-M4PUOAS\\SQLEXPRESS;Initial Catalog=db_TomeTwo;User ID=sa;Password=wh1090220084";//声明连接字符串


           using (SqlConnection Conn = new SqlConnection(ConnectionString))//创建数据库连接对象


           {undefined


               string sqlstr = "select top 5* from tb_Bookinfo";//定义查询语句


               SqlDataAdapter da = new SqlDataAdapter(sqlstr, Conn);//创建数据桥接器对象


               DataSet ds = new DataSet();//创建数据对象


               da.Fill(ds, "tb_Bookinfo");//填充数据集


               //查询图书信息表前3行数据的图书名称和作者


               var result = from b in ds.Tables["tb_Bookinfo"].AsEnumerable()


                            select new


                            {undefined


                                b_name = b.Field<string>("b_name"),


                                b_author = b.Field<string>("b_author")


                            };


               foreach (var item in result)//遍历输出查询结果


               {undefined


                   richTextBox1.Text +="图书名称:" + item.b_name + "  ******  作者:" + item.b_author+"\n";


               }


           }


       }


三、使用LINQ技术查询DataSet 中的多个表


    private void Frm_Main_Load(object sender, EventArgs e)


       {undefined


           string ConnectionString = "Data Source=DESKTOP-M4PUOAS\\SQLEXPRESS;Initial Catalog=db_TomeTwo;User ID=sa;Password=wh1090220084";//声明连接字符串


           using (SqlConnection Conn = new SqlConnection(ConnectionString))//创建数据库连接对象


           {undefined


               string sqlstr = "select * from tb_Register";//定义查询语句


               SqlDataAdapter da = new SqlDataAdapter(sqlstr, Conn);//创建数据桥接器对象


               DataSet ds = new DataSet();//创建数据对象


               da.Fill(ds, "register");//填充第一个数据表数据到DataSet


               sqlstr = "select * from tb_Sale";//定义查询语句


               da.SelectCommand.CommandText = sqlstr;//指定第二条查询语句


               da.Fill(ds, "sale");//填充第二个数据表数据到DataSet


               //查询有销售记录的药品信息


               var result = from r in ds.Tables["register"].AsEnumerable()


                            join s in ds.Tables["sale"].AsEnumerable()


                            on r.Field<string>("药品编号") equals s.Field<string>("药品编号")


                            select new


                            {undefined


                                drug_name = r["药品名称"].ToString(),


                                drug_factory = r["生产厂家"].ToString(),


                                drug_sale = s["销售额"].ToString()


                            };


               foreach (var item in result)                     //遍历输出查询结果


               {undefined


                   richTextBox1.Text += "药品名称:" + item.drug_name + "******生产厂家:" + item.drug_factory + "******销售额:" + item.drug_sale + "\n";


               }


           }


       }


四、使用LINQ技术对DataSet进行排序操作


private void Frm_Main_Load(object sender, EventArgs e)


       {undefined


           string ConnectionString = "server=WIN-GI7E47AND9R\\LS; database=db_TomeTwo; uid=sa; pwd=";//连接字符串


           using (SqlConnection Conn = new SqlConnection(ConnectionString))//创建数据库连接对象


           {undefined


               string sqlstr = "select * from tb_Bookinfo";//定义查询语句


               SqlDataAdapter da = new SqlDataAdapter(sqlstr, Conn);//创建数据桥接器对象


               DataSet ds = new DataSet();//创建数据对象


               da.Fill(ds, "tb_Bookinfo");//填充数据集


               //按照单价降序排序


               var result = from b in ds.Tables["tb_Bookinfo"].AsEnumerable()


                            orderby b.Field<decimal>("b_price") descending


                            select new


                            {undefined


                                b_name = b["b_name"].ToString(),


                                b_price = b["b_price"].ToString()


                            };


               foreach (var item in result)//遍历输出查询结果


               {undefined


                   richTextBox1.Text+="图书名称:" + item.b_name + "  ******  单价:" + item.b_price+"\n";


               }


           }


       }


五、使用TakeWhile提取满足条件的记录


    private void Frm_Main_Load(object sender, EventArgs e)


       {undefined


           string conStr = "Data Source=WIN-GI7E47AND9R\\LS;Database=db_TomeTwo;UID=sa;Pwd=;";//取连接字符串


           string sql = "select * from EmployeeInfo";//构造sql语句


           DataSet ds = new DataSet();//创建数据集


           using (SqlConnection con = new SqlConnection(conStr))//创建数据连接


           {undefined


               SqlCommand cmd = new SqlCommand(sql, con);//创建Command对象


               SqlDataAdapter sda = new SqlDataAdapter(cmd);//创建DataAdapter对象


               sda.Fill(ds, "EmployeeInfo");//填充数据集


           }


           //从头开始提取生日小于2009-7-1之前的员工信息


           IEnumerable<DataRow> query = ds.Tables["EmployeeInfo"].AsEnumerable().TakeWhile(itm => itm.Field<DateTime>("Birthday") < Convert.ToDateTime("2009-7-1"));


           dataGridView1.DataSource = query.CopyToDataTable();//设置dataGridView1数据源


       }


六、使用SkipWhile跳过指定条件的记录


  private void Frm_Main_Load(object sender, EventArgs e)


       {undefined


           string conStr = "Data Source=WIN-GI7E47AND9R\\LS;Database=db_TomeTwo;UID=sa;Pwd=;";//取连接字符串


           string sql = "select * from EmployeeInfo";//构造sql语句


           DataSet ds = new DataSet();//创建数据集


           using (SqlConnection con = new SqlConnection(conStr))//创建数据连接


           {undefined


               SqlCommand cmd = new SqlCommand(sql, con);//创建Command对象


               SqlDataAdapter sda = new SqlDataAdapter(cmd);//创建DataAdapter对象


               sda.Fill(ds, "EmployeeInfo");//填充数据集


           }


           //跳过生日小于2009-7-1的员工信息


           IEnumerable<DataRow> query = ds.Tables["EmployeeInfo"].AsEnumerable().SkipWhile(itm => itm.Field<DateTime>("Birthday") < Convert.ToDateTime("2009-7-1"));


           dataGridView1.DataSource = query.CopyToDataTable();//设置dataGridView1数据源


       }


上一篇:《数据结构与算法 C语言版》—— 2.3线性表的链式表示与实现


下一篇:WEB浏览器兼容(转)