DataTable与Linq相互转换方法

来源:互联网 发布:跳跃网络账号升级 编辑:程序博客网 时间:2024/06/05 18:18

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 plaincopy
  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. }  


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手指夹伤出血了怎么办 手指夹破流血了怎么办 喂了宝宝熊胆粉怎么办 不小心擦伤了皮怎么办 吃了减肥药拉肚子怎么办 遇到他心通的人怎么办 被茅山术害了怎么办 鱼缸鱼身上烂了怎么办 鳄鱼龟皮肤烂了怎么办 墨水渗透进皮肤里了怎么办 中药渗透到皮肤里怎么办 甘露醇渗透到皮肤下怎么办 水银弄到眼睛里怎么办 水银粘到皮肤上怎么办 榴莲和虾同吃了怎么办 吃榴莲和虾中毒怎么办 榴莲和虾一起吃怎么办 狗被别人下毒了怎么办 大掌门2没存元宝怎么办 大掌门2转换阵容怎么办 率土之滨s2绝版怎么办 异界气息的装备怎么办 vivo电板没电了怎么办 门套拼接有缝隙怎么办 公司如果一直没有上税收入怎么办 赛车输了俩百万怎么办 交pk金员工不交怎么办 员工不想交pk金怎么办 心悦光环领错角色怎么办 心悦光环领错了怎么办 扑克牌1到13洗后怎么办 南通长牌没钱了怎么办 镇魔曲手游阵营人数已满怎么办 镇魔曲忘记在哪个区怎么办 登录镇魔曲卡在实名验证怎么办 电脑玩联盟花屏怎么办 优盘文件或目录损坏怎么办 苹果下吃鸡设备不兼容怎么办 龙之谷账号忘了怎么办 不花钱的排风除湿怎么办 苹果平板id密码忘了怎么办