DataTable与Linq相互转换方法

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

    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>( );

[c-sharp]   view plain copy
  1. namespace UseCopyToTable  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             UseCopyToDTSimple( );  
  8.             UseSetField( );  
  9.         }  
  10.   
  11.         static DataSet BuildDataSet( )  
  12.         {  
  13.             //创建Students数据集  
  14.             DataSet ds = new DataSet("Students");  
  15.             //创建Students数据表,并添加到数据集  
  16.             //Students数据表包含学生信息  
  17.             DataTable dtStu = new DataTable("Students");  
  18.             ds.Tables.Add(dtStu);  
  19.             //添加学生信息记录的列信息  
  20.             dtStu.Columns.AddRange(new DataColumn[]{  
  21.                 new DataColumn("Name", Type.GetType("System.String")),  
  22.                 new DataColumn("XingBie", Type.GetType("System.String")),  
  23.                 new DataColumn("Age", Type.GetType("System.Int32")),  
  24.                 new DataColumn("ScoreID", Type.GetType("System.Int32")),  
  25.             });  
  26.             //添加学生信息的行信息  
  27.             dtStu.Rows.Add("张三""男", 20, 1);  
  28.             dtStu.Rows.Add("李四""男", 19, 2);  
  29.             dtStu.Rows.Add("王霞""女", 21, 3);  
  30.             dtStu.Rows.Add("赵敏""女", 22, 4);  
  31.             dtStu.Rows.Add("吴安""男", 18, 5);  
  32.             //创建Scores数据表,并添加到数据集  
  33.             //Scores数据表包含学生成绩记录  
  34.             DataTable dtScore = new DataTable("Scores");  
  35.             ds.Tables.Add(dtScore);  
  36.             //添加成绩记录的列信息  
  37.             dtScore.Columns.AddRange(new DataColumn[]{  
  38.                 new DataColumn("ScoreID", Type.GetType("System.Int32")),  
  39.                 new DataColumn("Math", Type.GetType("System.Int32")),  
  40.                 new DataColumn("Chinese", Type.GetType("System.Int32")),  
  41.                 new DataColumn("English", Type.GetType("System.Int32")),  
  42.             });  
  43.             //添加学生成绩记录  
  44.             dtScore.Rows.Add(1, 80, 75, 78);  
  45.             dtScore.Rows.Add(3, 88, 80, 60);  
  46.             dtScore.Rows.Add(4, 75, 90, 80);  
  47.             dtScore.Rows.Add(5, 59, 80, 75);  
  48.             //返回数据集  
  49.             return ds;  
  50.         }  
  51.   
  52.         static void UseCopyToDTSimple( )  
  53.         {  
  54.             //获取数据集和要进行查询的数据表  
  55.             DataSet ds = BuildDataSet( );  
  56.             DataTable dtStu = ds.Tables["Students"];  
  57.             DataTable dtScore = ds.Tables["Scores"];  
  58.             //查询query1年龄大于20且具有成绩的学生  
  59.             var query1 =  
  60.                 from stu in dtStu.AsEnumerable( )  
  61.                 from score in dtScore.AsEnumerable( )  
  62.                 where stu.Field<int>("ScoreID") == score.Field<int>("ScoreID")  
  63.                 where (int)stu["Age"] > 20  
  64.                 select stu;  
  65.             //通过CopyToDataTable()方法创建新的副本  
  66.             DataTable newDt = query1.CopyToDataTable<DataRow>( );  
  67.             //打印副本的信息  
  68.             System.Console.WriteLine("学生列表:");  
  69.             foreach (var item in newDt.AsEnumerable())  
  70.             {  
  71.                 System.Console.WriteLine("姓名:{0}, 性别:{1}, 年龄:{2}",  
  72.                     item["Name"], item["XingBie"], item["Age"]);  
  73.             }  
  74.         }  
  75.   
  76.         static void UseSetField( )  
  77.         {  
  78.             //获取数据集和要进行查询的数据表  
  79.             DataSet ds = BuildDataSet( );  
  80.             DataTable dtStu = ds.Tables["Students"];  
  81.             //将所有学生的年龄都增加2岁  
  82.             foreach (var row in dtStu.AsEnumerable())  
  83.             {  
  84.                 int age = row.Field<int>("Age");  
  85.                 row.SetField<int>("Age", age + 2);  
  86.             }  
  87.             //打印新的学生信息  
  88.             System.Console.WriteLine("学生列表:");  
  89.             foreach (var item in dtStu.AsEnumerable( ))  
  90.             {  
  91.                 System.Console.WriteLine("姓名:{0}, 性别:{1}, 年龄:{2}",  
  92.                     item["Name"], item["XingBie"], item["Age"]);  
  93.             }  
  94.         }  
  95.     }  
  96. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值