DataTable与Linq相互转换方法

DataTable通过dt.AsEnumerable()方法转换可用Linq查询 。 DataTable newDt = query1.CopyToDataTable( );

    var query1 =
                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>( );
    namespace UseCopyToTable  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                UseCopyToDTSimple( );  
                UseSetField( );  
            }  

            static DataSet BuildDataSet( )  
            {  
                //创建Students数据集  
                DataSet ds = new DataSet("Students");  
                //创建Students数据表,并添加到数据集  
                //Students数据表包含学生信息  
                DataTable dtStu = new DataTable("Students");  
                ds.Tables.Add(dtStu);  
                //添加学生信息记录的列信息  
                dtStu.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")),  
                    new DataColumn("ScoreID", Type.GetType("System.Int32")),  
                });  
                //添加学生信息的行信息  
                dtStu.Rows.Add("张三", "男", 20, 1);  
                dtStu.Rows.Add("李四", "男", 19, 2);  
                dtStu.Rows.Add("王霞", "女", 21, 3);  
                dtStu.Rows.Add("赵敏", "女", 22, 4);  
                dtStu.Rows.Add("吴安", "男", 18, 5);  
                //创建Scores数据表,并添加到数据集  
                //Scores数据表包含学生成绩记录  
                DataTable dtScore = new DataTable("Scores");  
                ds.Tables.Add(dtScore);  
                //添加成绩记录的列信息  
                dtScore.Columns.AddRange(new DataColumn[]{  
                    new DataColumn("ScoreID", Type.GetType("System.Int32")),  
                    new DataColumn("Math", Type.GetType("System.Int32")),  
                    new DataColumn("Chinese", Type.GetType("System.Int32")),  
                    new DataColumn("English", Type.GetType("System.Int32")),  
                });  
                //添加学生成绩记录  
                dtScore.Rows.Add(1, 80, 75, 78);  
                dtScore.Rows.Add(3, 88, 80, 60);  
                dtScore.Rows.Add(4, 75, 90, 80);  
                dtScore.Rows.Add(5, 59, 80, 75);  
                //返回数据集  
                return ds;  
            }  

            static void UseCopyToDTSimple( )  
            {  
                //获取数据集和要进行查询的数据表  
                DataSet ds = BuildDataSet( );  
                DataTable dtStu = ds.Tables["Students"];  
                DataTable dtScore = ds.Tables["Scores"];  
                //查询query1年龄大于20且具有成绩的学生  
                var query1 =  
                    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>( );  
                //打印副本的信息  
                System.Console.WriteLine("学生列表:");  
                foreach (var item in newDt.AsEnumerable())  
                {  
                    System.Console.WriteLine("姓名:{0}, 性别:{1}, 年龄:{2}",  
                        item["Name"], item["XingBie"], item["Age"]);  
                }  
            }  

            static void UseSetField( )  
            {  
                //获取数据集和要进行查询的数据表  
                DataSet ds = BuildDataSet( );  
                DataTable dtStu = ds.Tables["Students"];  
                //将所有学生的年龄都增加2岁  
                foreach (var row in dtStu.AsEnumerable())  
                {  
                    int age = row.Field<int>("Age");  
                    row.SetField<int>("Age", age + 2);  
                }  
                //打印新的学生信息  
                System.Console.WriteLine("学生列表:");  
                foreach (var item in dtStu.AsEnumerable( ))  
                {  
                    System.Console.WriteLine("姓名:{0}, 性别:{1}, 年龄:{2}",  
                        item["Name"], item["XingBie"], item["Age"]);  
                }  
            }  
        }  
    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值