zoukankan      html  css  js  c++  java
  • LINQ to DataSet 之单表查询

           查询单个数据表

           根据Linq to DataSet概述的步骤,

           第一步我们获取数据源,我们这里手动创建一个datatable数据源

     static DataSet BuildOneDTDataSet() {
                string[] nameset = { "张三", "李思思", "lisi", "王五", "路六", "欧赔", "夏琪","王二麻子" };
                string[] xbSet = { "男", "女", "男", "女", "男", "女", "男", "女" };
                int[] ageSet = { 12, 45, 23, 45, 78, 56, 12, 22 };
                DataSet ds = new DataSet("PeopleDs");//创建名为"PeopleDs"的dataset对象
                DataTable dt = new DataTable("PeopleDt");//创建名为PeopleDt的datatable对象
                ds.Tables.Add(dt);
                dt.Columns.AddRange(
                new DataColumn[]{
                new DataColumn("Name",Type.GetType("System.String")),
                new DataColumn("XingBie",Type.GetType("System.String")),
                new DataColumn("Age",Type.GetType("System.Int32")) 
                }
                );
                for (int i = 0; i < nameset.Length; i++) //将数据写进一张datatable表
                {
                    DataRow row = dt.NewRow();
                    row["Name"] = nameset[i];
                    row["Age"] = ageSet[i];
                    row["XingBie"] = xbSet[i];
                    dt.Rows.Add(row);
                }
                return ds;
            }

       第二步,将datatable转换成IEnumberable<T>类型,使用AsEnumerable(),结合linq语法进行查询

    static void UseSelect() {
                DataSet ds = BuildOneDTDataSet();
                DataTable dt = ds.Tables["PeopleDT"];//从数据集中获取名为PeopleDt的数据表
                var query = from pl in dt.AsEnumerable() select pl;
                foreach (var item in query)
                {
                    Console.WriteLine("姓名{0},年龄{1},性别{2}", item.Field<string>("Name"), item.Field<int>("Age"), item.Field<string>("XingBie"));
                }
    
                var query1 = from pl in dt.AsEnumerable() select pl.Field<string>("Name");
                foreach (var item in query1)
                {
                    Console.WriteLine(item);
                }
                //查询所有年龄大于22岁的记录
                var query2 = from pl in dt.AsEnumerable() 
                             where pl.Field<int>("Age") > 22 
                             orderby  pl.Field<int>("Age") descending select pl;
                foreach (var item in query2)
                {
                    Console.WriteLine("姓名{0},年龄{1}",item.Field<string>("Name"),item.Field<int>("Age"));
                }
                //查询所有年龄在20到40之间的记录
                var query3 = from pl in dt.AsEnumerable()
                             where pl.Field<int>("Age") > 20 && pl.Field<int>("Age") < 40
                             orderby pl.Field<int>("Age") ascending
                             select pl;
                foreach (var item in query3)
                {
                    Console.WriteLine("姓名{0},年龄{1}", item.Field<string>("Name"), item.Field<int>("Age"));
                }
            }

     特别注意到的错误:

      第一部分是手动创建Datable列表,

    dt.Columns.AddRange给Datatable创建表结构,在下面for循环里进行给行添加数据的时候,DataRow dr =new DataRow(),这种写法是十分错误的

    DataRow表示是DataTable中的一行数据,要实例化DataRow必须先实例Datatable,DataTable要确定DataaRow的结构。
    DataRow的构造函数如下:
    protected internal DataRow (
    DataRowBuilder builder
    )

    DataRow是一个受保护的internal类。
    internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。

     一、ms这么做是有他的隐含意思在里面的:
    一个table和他对应的row应该是有相同结构的,为了保证他们结构相同,就必须按照一个统一标准来规范他们.要么用table来规范row,那么让row去格式化table,ms选择了前一种方式,这里他们又隐含一层意思,那就是生成的顺序,table比row先生成.

    所以为了严格保证这种规范和生成顺序,该构造函数就限制成了protected internal ,ok了,这么做,你就是想把table和row结构不对应都不成了,因为他没有留给你任何犯错的机会

    所以这里我们应该使用     DataRow dr = dt.newRow();

    简单来说,Linq to DataSet 查询Datatable 可以简单分成两部分,将DataTable转换成IEnumberable<T>数据集合,然后是对集合进行操作

  • 相关阅读:
    iOS 程序内国际化的一些心得(2)
    iOS 程序内国际化的一些心得(1)
    写个自己的Xcode4插件
    iOS命令行获取工程内所有的国际化资源并且整合
    用xib自定义UITableViewCell的注意事项——重用问题
    遍历类成员
    iOS 键盘取消晃动撤销动作
    iap验证。
    4 WPF学习---系统的学习XAML语法
    webService访问加密-Soapheader
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/8867083.html
Copyright © 2011-2022 走看看