datatable的一些常用用法

今天看linq的时候看到了datatable的一个方法---AsEnumerable()跟着这个一起,我又把datatable的一些常用的东西自己总结了一下,防止以后忘了怎么用了

 

1)利用主键在datatable里面查找特定的数据项,方法为select返回值类型为datarow数组。(貌似以前我都是利用for循环在datagridview中查找,或者利用for循环在dataset里面查找,此方法需要注意的地方是需要“主键”如果是其他字段不好用。

 

        DataSet ds = DbHelperSQL.Query("select * from tb_user");
        DataRow[] dr = ds.Tables[0].Select.("uid>0");//此处应为主键即uid
       foreach (DataRow d in dr)
        {
            for (int i = 0; i < d.ItemArray.Length; i++)//通过使用d.itemarray来获取数据行有几个数据列
            {
                Response.Write(d[i]);
            }
            Response.Write("<hr/>");
        }

注:上面的也不一定就是主键,我么可以按照sql语句中的where中的条件去写也是一样的,如(uid>20 and name="wenbin")也可以。

2)连带着的,把dropdownlist的数据绑定也看了一下代码如下:(我以前是通过for循环来为dropdownlist一条一条的绑定数据,现在用下面的方法就方便多了)

        DropDownList1.DataValueField = "uid";
        DropDownList1.DataTextField = "name";
        DropDownList1.DataSource = ds.Tables[0];
        DropDownList1.DataBind();

指定特定的数据值字段、文本字段还有数据源就行了。

 

3)下面简单的讲解一下AsEnumerable()方法,这个方法我是在linq里面看到的,它主要用在对dataset进行查询的时候使用的,其实就是对datatable查询所使用的。

返回值类型为EnumerableRowCollection<DataRow>

        var query = from wenbin in ds.Tables[0].AsEnumerable() where wenbin.Field<int>("uid") > 0 select wenbin;//红色标注部分为字段udi的筛选条件
        foreach (var a in query)
        {
            Response.Write("<div style='border:1px dotted red; width:200px; height:200px;'>" + a["pwd"] + "</div>");
            //或者
              Response.Write("<div style='border:1px dotted red; width:200px; height:200px;'>" + a.Field<string>("pwd") + "</div>");
        }


上面的第一句的条件语句可以换成如下代码:

       var query = ds.Tables[0].AsEnumerable().Where(wenbin => (wenbin.Field<string>("name").Trim() == "菲菲"));


这两句表达的是一个意思,只不过一个是完整的linq语句,一个是简化了的lambda表达式。

然后还有下面的一些方法,我从网上搜到的,大家也可以看看

 

DataTable dt = GetDetails().Tables[0]; //获取可用的DataTable
            // var m = dt.AsEnumerable().Last<DataRow>(); 返回DataTable最后一行DataRow
            //var m = dt.AsEnumerable().First<DataRow>(); 返回DataTable第一行DataRow
            //var m = dt.AsEnumerable().Count<DataRow>();返回DataTable总行数
            //var m = dt.AsEnumerable().ElementAt<DataRow>(TipIndex); 返回DataTable 第TipIndex条的DataRow
            //var m = dt.AsEnumerable().Reverse<DataRow>(); 对DataTable反向排序
            //var m = dt.AsEnumerable().Skip<DataRow>(TipIndex); 跳过DataTable前TipIndex条
            var m = dt.AsEnumerable().Take<DataRow>(TipIndex); //提取DataTable前TipIndex条
            DataTable T = m.CopyToDataTable<DataRow>();

        其中最后一个未注释的是经常用到的,可以用来提取前N行,类似于SQL中的Top N。


上面黄色的代码转自:http://hi.baidu.com/jiang_yy_jiang/item/cf375c90a69b351b924f41a3

其实上面转的部分带我我个人不提倡使用,比较麻烦如//var m = dt.AsEnumerable().First<DataRow>(); 返回DataTable第一行DataRow  这一句,我们完全可以使用

dt.rows[0]来实现。而且效率上我觉得dt.rows[0]的效率能高一些,毕竟的代码里面还有转换。不过使用上还是看个人喜好........

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值