zoukankan      html  css  js  c++  java
  • LINQ to DataSet

    LINQ to DataSet的使用通常包含以下步骤:

    (1)获取DataSet/DataTable数据源。LINQ to DataSet通过LINQ查询DataSet/DataTable中的数据,所以首先要准备DataSet/DataTable数据源,可以通过ADO.NET技术从数据库获取,可以通过XML技术从XML文件获取,也可以从其他任何形式的数据源获取,甚至可以在内存中直接创建并填充DataSet/DataTable对象。

    (2)将DataTable转换成IEnumerable<T>类型。LINQ只能在IEnumerable<T>或IQueryable<T>接口对象上执行查询操作,而DataTable并没有实现这两个接口,不能直接查询。在LINQ to DataSet中,通过DataTableExtensions扩展的AsEnumerable()方法从DataTable获取一个等价的IEnumerable<T>对象。

    (3)使用LINQ语法编写查询。LINQ to DataSet中查询的编写可以使用查询语法和方法语法,可以对它执行任何IEnumerable<T>允许的查询操作。

    (4)使用查询结果。查询结果产生后,就可以使用查询结果(一个IEnumerable<T>对象),比如,用foreach遍历所有元素,用Max()等进行数值计算,将它作为数据源进行二次查询等。

    关键语法

    1.AsEnumerable:将DataTable转换成一个类型为IEnumerable<DataRow>的可枚举数据集合

    例:

    var query1 =
            from pl in dt.AsEnumerable( )
            select pl;

    2.Field<T>():通过它获取DataRow的某字段的数据

    例:

    foreach (var item in query1)                                   //打印查询query1的结果
        {
            //演示Field<T>方法的使用
            System.Console.WriteLine("姓名:{0},性别:{1},年龄:{2}",
            item.Field<string>("Name"), item.Field<string>("XingBie"), item.Field<int>("Age"));
        }

    3.SetField<T>():用于设置数据表中指定列的数据,并且指定明确的数据类型

    例:

        foreach (var row in dtStu.AsEnumerable())
        {
            int age = row.Field<int>("Age");
           row.SetField<int>("Age", age + 2);
        }

    4.CopyToDataTable():从数据表中获取到的查询结果(类型为IEnumerable<DataRow>)直接复制到一个新的数据表(DataTable)中,从而可以将查询结果绑定到界面控件(DataGridView等),也可以使用一些DataTable特有的特性

    例:

    var query1 =   //查询query1年龄大于20且具有成绩的学生
            from stu in dtStu.AsEnumerable( )
            from score in dtScore.AsEnumerable( )
            where stu.Field<int>("ScoreID") == score.Field<int>("ScoreID")
            where (int)stu["Age"] > 20
            select stu;
    
        //通过CopyToDataTable()方法创建新的副本
        DataTable newDt = query1.CopyToDataTable<DataRow>( );

    5.AsDataView():从DataTable或LINQ查询创建一个与数据源对应的DataView对象

    例:

    //用DataTable.AsDataView()方法从数据表dt创建DataView对象dvDt
        DataView dvDt = dt.AsDataView( );
    
    //query1用LINQ查询创建DataView对象dvDt,查询它所有的元素
        EnumerableRowCollection<DataRow> query1 =
            from stu in dt.AsEnumerable( )
            select stu;
        DataView dvNml = query1.AsDataView( );                   //获取查询query1产生的DataView

    6.DataRowComparer

    //与免打扰中的用户进行比较,筛选出可以正常接收推送的用户
    var normalReceive = dtUser.AsEnumerable().Except(dtDND.AsEnumerable(), DataRowComparer.Default);
    
    //比对两个表的用户名一致的,保存username到list中
    var intersectUser = dtUserPower.AsEnumerable().Intersect(normalReceive, DataRowComparer.Default);

     7.join

    var query =
        from order in orders.AsEnumerable()
        join customer in customers.AsEnumerable()
        on order.Field<string>("CustomerID") equals
            customer.Field<string>("CustomerID")
        select new
        {
            CustomerID =
                order.Field<string>("CustomerID"),
            CompanyName =
                customer.Field<string>("CompanyName"),
            OrderDate =
                order.Field<DateTime>("OrderDate"),
            OrderID =
                order.Field<int>("OrderID")
        };

    参考:http://yysyb123.blog.163.com/blog/static/1920504720104135734664/

    http://www.cnblogs.com/yourancao520/archive/2013/05/24/3096769.html

    http://www.cnblogs.com/chenxizhang/archive/2009/04/29/1445994.html

  • 相关阅读:
    【基于mini2440开发板的交叉编译环境及内核树配置.
    linux 模块编译步骤(原)
    鸟哥的linux私房菜
    ios消息机制
    初学者必学文档:Objective-C语法入门(1)
    oc基础知识
    ios 人魔七七
    Usaco Open09 Gold
    USACO JAN 2012 Bronze
    USACO·2012·Feb Bronze
  • 原文地址:https://www.cnblogs.com/zhengwk/p/5342426.html
Copyright © 2011-2022 走看看